山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

AtCoder Beginner Contest 100 の感想

AtCoder Beginner Contest 100

今回は記念すべき100回目のコンテストということで、いつも以上に頑張ろうと思いました。まあ、参加回数そんなに多くはないですが。

https://abc100.contest.atcoder.jp/assignments

A - Happy Birthday!

例題がかなりヒントになっていたと思います。

 A B の値が 8 以下であれば、ケーキを分けることができます。

B - Ringo's Favorite Numbers

 N = 100 のときに注意する問題です。

答えは、

  •  D = 0 のとき  N = 100 のとき、 N + 1

 N \neq 100 のとき、 N

  •  D = 1 のとき

 N = 100 のとき、 101N

 N \neq 100 のとき、 100N

  •  D = 2 のとき

 N = 100 のとき、 10100N

 N \neq 100 のとき、 10000N

になります。

C - *3 or /2

 a_i における 2 の因数の数を数えます。

数列  a_i の2の因数の数の合計を S とします。

 S が答えとなります。

コード
import java.util.Scanner;

public class ProblemC {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        long []a = new long[N];
        for(int i = 0; i < N; i++) {
            a[i] = scan.nextLong();
        }
        scan.close();

        long p = 0;
        for(int i = 0; i < N; i++) {
            p += num2(a[i]);
        }

        if(p == 0) {
            System.out.println(0);
        }else {
            System.out.println(p - N);
        }

    }
    public static int num2(long n) {
        for(int i = 1; i < 10000; i++) {
            long t = (long)Math.pow(2, i);
            if(n % t != 0) {
                return i;
            }
        }
        return 0;
    }
}

感想

サイトが全体的に重かったですが、あまり支障はありませんでした。

今回はC問題まで解くことができました。いつものC問題よりは易しかった気がします。ですが、D問題は全く分かりませんでした。