はまやんはまやんはまやん

hamayanhamayan's blog

Two Operations No.2 [yukicoder No.643]

https://yukicoder.me/problems/no/643

解法

https://yukicoder.me/submissions/233985

以下の解法は証明無しで雰囲気で通している。
 
操作1では数自体は変わらないので、操作2で同じ数になる場合を考えてみる。
X' = Y'
X + Y = X - Y
2Y = 0
Y = 0
より、Y=0となれば操作2で同じ数と出来る。
 
次はY=0となる場合を考えてみるが、
X' = X + Y
Y' = X - Y
なので、Y'=0の場合はX=Yを満たしていて意味が無いので、X+Y=0より、X=-Yのときに0が作れる。
 
この辺から考えると、

  • X=Yなら0
  • Y=0なら1(操作2)
  • X=0なら2(操作1→操作2)
  • X=-Yなら3(操作2→操作1→操作2)
  • それ以外なら作れない

 
それ以外が作れないのが証明できないが、例を作っていくら考えても出てこないので、サブミット証明すると通る。

int X, Y;
//---------------------------------------------------------------------------------------------------
int solve() {
    if (X == Y) return 0;
    if (Y == 0) return 1;
    if (X == 0) return 2;
    if (X == -Y) return 3;
    return -1;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> X >> Y;
    cout << solve() << endl;
}