标签:
uva,127
前面见过几次类似的模型了。似乎输入输出差不多形式。
考虑vector或list里面放stack。因为这道题目只涉及到随机访问,所以vector相对要快一点。
因为每次其左边的第一个或第三个与其与其匹配时,就把它放在左一或左三上。有木有压栈的感觉~~
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 #include <stack> 6 7 using namespace std; 8 9 struct Node 10 { 11 char value; 12 char suit; //char value[2]; 13 }; 14 15 int match(Node x,Node y) 16 { 17 if(x.value==y.value || x.suit==y.suit) 18 return 1; 19 return 0; 20 } 21 22 23 24 int main() 25 { 26 vector<stack<Node> > vr; 27 char v,s; //Node s; 28 while(cin>>v && v!=‘#‘) //cin>>s.value && strcmp(s.value,"#"); 29 { 30 cin>>s; 31 stack<Node> sk; 32 sk.push((Node){v,s}); //sk.push(s); 33 vr.push_back(sk); 34 int i; 35 if(vr.size()==52) 36 { while(true) 37 { 38 for(i=0;i!=vr.size();i++) 39 { 40 if(i>=3 && match(vr[i].top(),vr[i-3].top())) 41 { 42 vr[i-3].push(vr[i].top()); 43 vr[i].pop(); 44 break; 45 } 46 47 if(i>=1 && match(vr[i].top(),vr[i-1].top())) 48 { 49 vr[i-1].push(vr[i].top()); 50 vr[i].pop(); 51 break; 52 } 53 } 54 if(i==vr.size()) break; 55 else if(vr[i].empty()) 56 vr.erase(vr.begin()+i); 57 } 58 cout<<vr.size()<<(vr.size()==1?" pile remaining:":" piles remaining:"); 59 for(i=0;i<vr.size();i++) 60 cout<<‘ ‘<<vr[i].size(); 61 cout<<endl; 62 vr.clear(); 63 } 64 65 } 66 return 0; 67 }
标签:
原文地址:http://www.cnblogs.com/do-it-best/p/5373024.html