Number Game [ZOJ 3180]
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3221
View Code
//逆推 const int MM = 1111111; #define debug puts("wrong") //typedef __int64 int64; const double lep=1e-10; int N,M, n,m; map<vector<int>,bool>mp; vector<int>st; vector<int>en; void get_data() { int i,j,k,a; st.clear(); for(i=0;i<3;i++) { scanf("%d",&a); st.push_back(a); } en.clear(); for(i=0;i<3;i++) { scanf("%d",&a); en.push_back(a); } sort(st.begin(),st.end()); sort(en.begin(),en.end()); } bool ok() { vector<int>tmp; tmp=en; tmp[2]=tmp[0]+tmp[1]-1; sort(tmp.begin(),tmp.end()); if(mp[tmp]) return true; tmp=en; tmp[1]=tmp[0]+tmp[2]-1; sort(tmp.begin(),tmp.end()); if(mp[tmp]) return true; tmp=en; tmp[0]=tmp[2]+tmp[1]-1; sort(tmp.begin(),tmp.end()); if(mp[tmp]) return true; else return false; } void solve() { int i,j,k; if(st==en) { puts("Yes");return; } if(st[0]+st[1]!=st[2]+1) { puts("No");return; } mp.clear(); while(1) { mp[st]=true; st[2]=st[1]-st[0]+1; sort(st.begin(),st.end()); if(mp[st]) break; } if(ok()) puts("Yes"); else puts("No"); } int main() { int ca; scanf("%d",&ca); while(ca--) get_data(),solve(); return 0; }