AtCoder ABC 086 A&B&C
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)$の偶奇は一致する
- なぜなら、1秒間で動けるのは以下の4パターンのみ
- $経過時間T \geqq (Xの移動量+Yの移動量)$は常に成り立つ
- $T_i$秒が偶数なら、$(X_i+Y_i)$は偶数である
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();
}
}
}