bpeldi2oerkd8の開発日誌

とあるひよっこエンジニアの成長の記録。

AtCoder Beginner Contest 165 に参加しました!

abc165_score
先ほど行われたAtCoder Beginner Contest 165 に参加してきました!
やっと茶色が見えてきたような気がします!
早速感想です。

ちなみに、前回の結果はこちらです。
developer-bpeldi2oerkd8.hatenablog.com

準備

前回に引き続いてD問題の勉強を続けました。
前回から今回までで勉強した内容は以下の通りです。

  • 貪欲法
  • Mod計算
  • 二分探索(の一部)

やはりライブラリを充実させていかないといけないのと、それを使いこなす力をつけることが必要だと感じました。
DPについては結構出て、やらなきゃいけないと思っているのですが、量が多いので後回しにしてしまっています。

経過

始まった後すぐにサイトが重くなって、とても嫌な予感がしましたが、なんとか10分遅れで始まりました。

A, B問題については、最近の中では比較的難しめだったので、今回は全体的に難易度が上がるなと思いました。
案の定、C問題は難しめで、この後のD問題のほうが解けている人が多かったですね。
C問題については全探索かなと思ったのですが、良い列挙の方法が思いつかず、苦戦しました。
なので、順位表を見ていると、D問題のほうが解けている人が多かったので、D問題を解くことにしました。
D問題ではそこそこ苦戦しましたが、A*[x/B]に注目し、[x/B]が0となるxの中で最大のものを取ればよいと気づいたので、何とか解けました。
初めてのD問題ACで嬉しかったです。
次は、4完を目指したいと思います。

参考になるかわかりませんが、JavaでのD問題でACになった自分の解答を載せておきます。

import java.util.Scanner;

public class Main {
	//java11

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		int A = sc.nextInt();
		long B = sc.nextLong();
		long N = sc.nextLong();

		long x = 1;
		if(B >= 2) {
			x = Math.min(B-1, N);
		}

		long ans = (long)Math.floor((double)A*x/B) - A * (long)Math.floor((double)x/B);

		System.out.println(ans);

	}


}

結果

abc165_result
ABDの3完で65分で解きました。
AtCoderを始めてから、2度目の緑パフォです!
引き続き、努力を続けたいと思います!


というわけで、ABC165の結果でした。
次は4完を目指して勉強を続けたいと思います。
明日もあるので、今日は体調を整えて明日に備えたいと思います。