题目链接:
3个数为一组,找最大的一个数让它降低,则显然是有解的,分类讨论一下就可以
#include#include #include #include #include using namespace std;int n, k;int a[4];vector >ans;int maxpos(){ int pos = 0; for(int i = 1; i < 4; i++) if(a[pos] >= 1; a[(pos+1)%4] >>= 1; ans.push_back(pair (0, pos));}void ADD(int pos){ a[pos] ++; a[(pos+1)%4] ++; ans.push_back(pair (1, pos));}int main(){ while(cin>>a[0]>>a[1]>>a[2]>>a[3]){ ans.clear(); int pos, siz = 0; while(1){ pos = maxpos(); if(a[pos]==1)return true; int l = pos-1; if(l<0)l = 3; int r = pos+1; if(r>3)r = 0; if(a[pos]&1){ if(a[l]&1) { ADD(l); chu(l); } else if(a[r]&1) { ADD(pos); chu(pos); } else { ADD(pos); chu(l); } } else { if((a[l]&1)==0) { chu(l); } else if((a[r]&1)==0) { chu(pos); } else { ADD(l); ADD(pos); chu(l); } } } for(int i = 0; i < ans.size(); i++) printf("%c%d\n", ans[i].first?'+':'/', ans[i].second+1); } return 0;}