' P '

whatever I will forget

パリティ(偶奇性)

パリティとは

偶数と奇数に関する性質のことを指すらしい。(全くしらん)

C - Same Integers

atcoder.jp

全くわからず。なんとなーく3つの数字の和が関係している&3つの数字の最大値は関係があるような気はしたけど、
3つの値の最大値*3(または最大値+1*3)を導くことと、+1,+1しても+2しても3つの数字の和の偶奇が変わらない性質に気づけませんでした.

例えば例1に関して実証してみると
f:id:mankozooyork:20200626151015p:plain
確かにそうなってます。そして元々の和が奇数だった場合に(最大値+1)*3が偶数になってる場合は必ず答えとして合致しません。
この性質自体がわかればコードに落とし込むのはさほど難しくないはず

A - Addition

atcoder.jp

久々に解説見ずに解けた...
要はこれは奇数と奇数を足したら偶数にしかないので、与えられた数字の中に奇数の数字が奇数しかなかったら
偶数から偶数は作れないので、NOになります.

A - Move and Win

atcoder.jp

A-Bの距離差をmod2したときの答えによって回答が変わります。
適当にシミュレートしたら、お互いの初期地点をmod2したらそれで答えがでたと思ったのでそういう解き方してもACになっちゃいました...

import java.util.Scanner;

public class Main165 {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        int n = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();

        if(a%2 == 0 && b%2 == 0) {
            System.out.println("Alice");
        } else if(a%2 != 0 && b%2 != 0) {
            System.out.println("Alice");
        } else if(a%2 == 0 && b%2 != 0) {
            System.out.println("Borys");
        } else if(a%2 != 0 && b%2 == 0) {
            System.out.println("Borys");
        } else {
            System.out.println("Draw");
        }
    }
}

C - Walking Takahashi

めちゃいい問題。 地点 x から 移動距離 d を制限移動回数 k まで移動した時の最小座標を求めろという問題
最小座標を求めるということは、0に近い地点を求めるということ&かつ絶対値を求めよとなっているので正/負は気にしなくて良い
もし x - d \times kをした際に答えが0以上ならk回では0までたどり着けないので、それが答えになる、、が、制約が1015なのでオーバーフローする。
x \div d>=kとしておけば、大丈夫。解がk以上であればkでは目的地までたどり着けないので、同じ意味になる。
問題の肝はk以下の場合。その場合は、x \mod dとすれば残りの移動距離が判明する
残移動回数は、k - x \div dで求まるため、残移動回数が偶奇かによって答えは変わる。
偶数なら丁度移動回数が終了したため、x \mod d。奇数の場合はもう一回移動しないといけないといけないのでx \mod d - dとなる。

        long ans = 0;
        if(x/d>=k) {
            System.out.println(x - d*k);
        } else {
            long nk = k - x/d;
            long nx = x % d;
            if(nk%2==0) System.out.println(nx);
            else System.out.println(Math.abs(nx-d));
        }