LoginSignup
1
0

More than 5 years have passed since last update.

ABC - 086- A&B&C

Posted at

AtCoder ABC 086 A&B&C

AtCoder - 086

A問題

    private void solveA() {
        Scanner scanner = null;
        int numA = 0;
        int numB = 0;

        try {
            scanner = new Scanner(System.in);
            numA = scanner.nextInt();
            numB = scanner.nextInt();

            if (numA * numB % 2 == 0) {
                System.out.println("Even");
            } else {
                System.out.println("Odd");
            }

        } finally {
            if (scanner != null) {
                scanner.close();
            }
        }
    }

B問題

解法1

  • 文字列として取得
  • 繋げてsqrt
  • intにキャストして整数にする
  • 二乗して元の数値になればOK

解法2

  • 数値は最大でも100100なので、$0^2$ - $1000^2$ まで総当たりで調べる手もあるかな
    private void solveB() {
        Scanner scanner = null;
        String numA = "";
        String numB = "";

        try {
            scanner = new Scanner(System.in);
            numA = scanner.next();
            numB = scanner.next();

            double wkNum = Double.parseDouble(numA + numB);
            int wk = (int) Math.sqrt(wkNum);
            if (Math.pow(wk, 2) == wkNum) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }

        } finally {
            if (scanner != null) {
                scanner.close();
            }
        }
    }

C問題

  • 時刻0秒時に$(0,0)$からスタート
  • $T_i$秒後に$(X_i,Y_i)$点にいる場合
    • $T_i$秒が偶数なら、$(X_i+Y_i)$は偶数である
      • なぜなら、1秒間で動けるのは以下の4パターンのみ
        • $(X_i+1,Y_i)$ - $(X_i,Y_i+1)$
        • $(X_i-1,Y_i)$ - $(X_i,Y_i-1)$
      • そのため、$T_i$秒が偶数なら、$(X_i+Y_i)$の偶奇は一致する
    • $経過時間T \geqq (Xの移動量+Yの移動量)$は常に成り立つ
private void solveC() {
        Scanner scanner = null;
        int numN = 0;

        try {
            scanner = new Scanner(System.in);
            numN = scanner.nextInt();
            int[] t = new int[numN];
            int[] x = new int[numN];
            int[] y = new int[numN];

            for (int i = 0; i < t.length; i++) {
                t[i] = scanner.nextInt();
                x[i] = scanner.nextInt();
                y[i] = scanner.nextInt();
            }

            int cT = 0;
            int cX = 0;
            int cY = 0;
            for (int i = 0; i < numN; i++) {

                boolean wkB = (t[i] % 2 == 0);
                boolean wkB2 = ((x[i] + y[i]) % 2 == 0);

                if (wkB != wkB2) {
                    System.out.println("No");
                    return;
                }

                if (t[i] - cT < Math.abs(Math.abs(cX + cY) - Math.abs(x[i] + y[i]))) {
                    System.out.println("No");
                    return;
                }
                cT = t[i];
                cX = x[i];
                cY = y[i];
            }

            System.out.println("Yes");

        } finally {
            if (scanner != null) {
                scanner.close();
            }
        }
    }

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0