SRM604 div1 Easy PowerOfThree

メモ

Possibleの場合

xとyの和は

± 30 ± 31 ± ... ± 3k

なので、x座標かy座標どちらかが3の倍数+1or3の倍数-1になる

余計な1を消して3で割ると

± 30 ± 31 ± ... ± 3k-1

となり、x座標かy座標どちらかが3の倍数+1or3の倍数-1になる

これを繰り返していくとx=0、y=0となる

上記を満たさない場合はImpossible

コード

class PowerOfThree {
public:
  string ableToGet(int x, int y) {
    x = abs(x);
    y = abs(y);
    FOR(i,0,30) {
      if(x == 0 && y == 0) return "Possible";
      else if(x % 3 != 0 && y % 3 == 0) {
        if(x % 3 == 1) x--;
        else x++;
      } else if(x % 3 == 0 && y % 3 != 0) {
        if(y % 3 == 1) y--;
        else y++;
      } else return "Impossible";
      x /= 3;
      y /= 3;
    }
    return "Impossible";
  }
};