0
0

AtCoder ABC 327 の A,B,C だけやってみた (Java)

Last updated at Posted at 2023-11-05

詳細

AtCoder ABC327

A

問題

与えられた文字列の中に ab もしくは ba が含まれているか。

コード

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        scanner.next();
        String S = scanner.next();
        scanner.close();
        System.out.println(S.contains("ab") || S.contains("ba") ? "Yes" : "No");

    }
}

B

問題

与えられた整数を B として、

X^X = B

となるような X を出力する。
また、B の範囲は

1 \leq B \leq 10^{18}

である。

コード

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long B = Long.parseLong(scanner.next());
        BigDecimal b = new BigDecimal(B);
        scanner.close();
        for (int i=1;i<16;i++) {
            BigDecimal x = new BigDecimal(i);
            if (x.pow(i).equals(b)) {
                System.out.println(i);
                return;
            }
        }
        System.out.println("-1");
    }
}

ループの範囲は

15^{15} = 4.379 * 10^{17}
16^{16} = 1.845 * 10^{19}

から設定するとして、気を付けなくてはいけないのは累乗の計算をする部分である。
Math.pow を使用すると内部での誤差が無視できない大きさになるので今回は使わない。
代わりに BigDecimal 型を使用する。

JavaDoc BigDecimal

import java.math.*;

class HelloWorld {
    public static void main(String[] args) {
        // 普通の Math.pow
        System.out.println(Math.pow(15,15));

        // BigDecimal の pow
        BigDecimal a = new BigDecimal(15);
        System.out.println(a.pow(15));
    }
}

/*
4.3789389038085939E17
437893890380859375
*/

また、 BigDecimal では数値の比較を equals メソッドで行う。== 演算子は使わない。

C

問題

与えられた数独が正しいかを判定する。

数独 (Wikipedia)

コード

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[][] A = new int[9][9];
        int flag = 0;
        for (int i=0;i<9;i++) {
            Set<Integer> set = new HashSet<>();
            for (int j=0;j<9;j++) {
                int a = Integer.parseInt(scanner.next());
                A[j][i] = a;
                set.add(a);
            }
            if (set.size() != 9) flag = 1;
        }
        scanner.close();
        if (flag == 1) {
            System.out.println("No");
            return;
        }

        Set<Integer> set = new HashSet<>();
        for (int x=0;x<9;x++) {
            set.clear();
            for (int y=0;y<9;y++) {
                set.add(A[x][y]);
            }
            if (set.size() != 9) {
                System.out.println("No");
                return;
            }
        }

        for (int i=0;i<9;i+=3) {
            for (int j=0;j<9;j+=3) {
                set.clear();
                for (int ii=0;ii<3;ii++) {
                    for (int jj=0;jj<3;jj++) {
                        set.add(A[i+ii][j+jj]);
                    }
                }
                if (set.size() != 9) {
                    System.out.println("No");
                    return;
                }
            }
        }

        System.out.println("Yes");
        
    }
}
0
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
0
0