介绍了一个游戏规则,输入牌堆,要求输出胜负或者平。
用vector进行模拟,set储存状态,出现重复状态就是平。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include<iostream> #include<vector> #include<queue> #include<set> using namespace std; int t; vector<vector<int> >piles; set<vector<vector<int> > >past; bool read(){ int k; cin>>k; if(!k) return false; vector<int>temp; for(int i=0;i<8;i++) piles.push_back(temp); piles[7].push_back(k); for(int i=0;i<51;i++){ cin>>k; piles[7].push_back(k); } return true; } void start(){ t=7; for(int i=0;i<7;i++){ piles[i].push_back(piles[7][0]); piles[7].erase(piles[7].begin()); } past.insert(piles); return; } bool sum(int a,int b,int c,int i){ int k=piles[i][a]+piles[i][b]+piles[i][c]; if(k==10||k==20||k==30){ piles[piles.size()-1].push_back(piles[i][a]); piles[piles.size()-1].push_back(piles[i][b]); piles[piles.size()-1].push_back(piles[i][c]); piles[i].erase(piles[i].begin()+c); piles[i].erase(piles[i].begin()+b); piles[i].erase(piles[i].begin()+a); return true; } return false; } bool pickup(int i){ if(piles[i].size()<3) return false; if(sum(0,1,(int)piles[i].size()-1,i)) return true; if(sum(0,(int)piles[i].size()-2,(int)piles[i].size()-1,i)) return true; if(sum((int)piles[i].size()-3,(int)piles[i].size()-2,(int)piles[i].size()-1,i)) return true; return false; } void play(){ int i=0; while(piles[piles.size()-1].size()&&piles.size()!=1){ piles[i].insert(piles[i].end(),piles[piles.size()-1][0]); piles[piles.size()-1].erase(piles[piles.size()-1].begin()); while(pickup(i)); if(!piles[i].size()){ piles.erase(piles.begin()+i); i--; } i++,t++; if(i==piles.size()-1) i=0; if(past.find(piles)!=past.end()) break; past.insert(piles); } return; } void print(){ if(piles.size()==1) cout<<"Win : "<<t<<endl; else if(!piles[piles.size()-1].size()) cout<<"Loss: "<<t<<endl; else cout<<"Draw: "<<t<<endl; piles.clear(); past.clear(); return; } int main(){ ios::sync_with_stdio(false); while(read()){ start(); play(); print(); } return 0; }
|
1
| ios::sync_with_stdio(false);
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **