T1:
题目大意:有一个机器人在(0,0),要走到(x,y),它第i步可以从四个方向中选一个方向移动3^(i-1)的长度,问是否可行。
主要思路:将x,y的绝对值用3进制表示,如果最后一位不为0,那么就必须在当前步内走完,否则就永远不可能走到终点(若走完一步后x,y最后一位都为0则两个数都除以3,继续执行下一步)。所以就进行类似的模拟,直到x,y都为0或者得出无解的结论。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int abs(int x){ return x<0?-x:x; }
void swap(int &a,int &b){
int t=a; a=b; b=t;
}
class PowerOfThree{
public:
string ableToGet(int x, int y){
x=abs(x);
y=abs(y);
while (1){
if (x==0 && y==0) return "Possible";
if (x%3==0 && y%3==0) return "Impossible";
if (x%3!=0 && y%3!=0) return "Impossible";
if (x%3==0) swap(x,y);
if (x%3==2) ++x;
else --x