UVa 127 - "Accordian" Patience(模拟)
2014-11-30 21:18
459 查看
给出扑克牌堆,当堆顶的扑克与它左边或者左边第三堆的堆顶的扑克match(suit或rank相同),这张牌就移过去,优先移动三格,优先移动最左边牌堆顶的牌。
一开始用的string,stack,vector模拟的,在UVa上2.899s过了,后来学校有这个题,时间限制1s,进行了优化,VJ上测试0.999过的。
优化后代码:
原代码:
一开始用的string,stack,vector模拟的,在UVa上2.899s过了,后来学校有这个题,时间限制1s,进行了优化,VJ上测试0.999过的。
优化后代码:
#include<cstdio> #include<cstdlib> #include<string> #include<vector> #include<stack> using namespace std; stack<char *>pile; vector<stack<char *> > piles,emp(52); bool read(){ piles=emp; char *s=(char *)malloc(3); scanf("%s",s); if(s[0]=='#') return false; piles[0].push(s); for(int i=1;i<52;++i){ s=(char *)malloc(3); scanf("%s",s); piles[i].push(s); } return true; } bool match(char *a,char *b){ return (a[0]==b[0]||a[1]==b[1]); } int move(int i){ if(i>2&&match(piles[i].top(),piles[i-3].top())){ piles[i-3].push(piles[i].top()); piles[i].pop(); if(piles[i].empty()) piles.erase(piles.begin()+i); return 4; } if(i>0&&match(piles[i].top(),piles[i-1].top())){ piles[i-1].push(piles[i].top()); piles[i].pop(); if(piles[i].empty()) piles.erase(piles.begin()+i); return 2; } return 0; } void solve(){ int k; for(int i=1;i<piles.size();i++){ k=move(i); if(k) i-=k; } return; } void print(){ printf("%d%s",piles.size(),piles.size()==1?" pile remaining: ":" piles remaining: "); for(int i=0;i<piles.size();++i){ if(i) printf(" "); printf("%d",piles[i].size()); } printf("\n"); return; } int main(){ while(read()){ solve(); print(); } return 0; }
原代码:
#include<iostream> #include<string> #include<vector> #include<stack> using namespace std; stack<string>pile; vector<stack<string> >piles; bool read(){ ios::sync_with_stdio(false); string s; cin>>s; if(s=="#") return false; piles.push_back(pile); piles[0].push(s); for(int i=1;i<52;i++){ cin>>s; piles.push_back(pile); piles[i].push(s); } return true; } bool match(string a,string b){ return (a[0]==b[0]||a[1]==b[1]); } int move(int i){ if(i>2&&match(piles[i].top(),piles[i-3].top())){ piles[i-3].push(piles[i].top()); piles[i].pop(); if(piles[i].empty()) piles.erase(piles.begin()+i); return 4; } if(i>0&&match(piles[i].top(),piles[i-1].top())){ piles[i-1].push(piles[i].top()); piles[i].pop(); if(piles[i].empty()) piles.erase(piles.begin()+i); return 2; } return 0; } void solve(){ int k; for(int i=0;i<piles.size();i++){ k=move(i); if(k) i-=k; } return; } void print(){ ios::sync_with_stdio(false); cout<<piles.size(); cout<<(piles.size()==1?" pile remaining: ":" piles remaining: "); for(int i=0;i<piles.size();i++){ if(i) cout<<" "; cout<<piles[i].size(); } cout<<endl; piles.clear(); return; } int main(){ while(read()){ solve(); print(); } return 0; }
相关文章推荐
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVA 127 - "Accordian" Patience (模拟)
- UVA 127 - "Accordian" Patience---wa 了许久,错误原因见注释!
- UVA127 - "Accordian" Patience
- "Accordian" Patience UVA 127 (”手风琴“牌游戏)
- uva 127 - "Accordian" Patience
- UVa 127 - "Accordian" Patience
- 127 - "Accordian" Patience C++中栈,STL的模拟
- UVa 127 - "Accordian" Patience
- UVa 127 "Accordian" Patience
- UVa 127 - "Accordian" Patience 数据结构专题
- uva127 "Accordian" Patience poj1214 模拟
- UVa:127 "Accordian" Patience
- uva 127 - "Accordian" Patience
- UVa 127 "Accordian" Patience
- ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)
- uva 127 poj 1214 "Accordian" Patience (栈STL运用)
- UVA127- "Accordian" Patience(模拟链表)
- Uva - 127 - "Accordian" Patience