uva 127 - "Accordian" Patience题解
2014-03-23 10:20
381 查看
此题的意思网上有很多的翻译,就不说了。一开始花费好多时间去理解题意,还是英语太差了。看过网上很多解法有用二维数组的,但是那样每移动一次就要把后面的全部前移一位,这个时间复杂度o(n)其实是没有必要的,用链表就可以解决,每一个元素是一个栈,参考大牛的思想用数组去模拟链表发觉写的更加清楚一点。以后就用博客把每一个我觉得挺好的题目贴上来吧,当作一个保存的地方
//栈与链表的问题 #include<cstdio> #include<algorithm> #include<iostream> #include<stack> #include<string.h> using namespace std; struct card { char face[3];//最后一个‘/0’ }; struct Node { stack<card>pile; } node[60]; int next[60],prev[60]; void move(int pos, int n) { if(n == 3) { int prev3 = prev[prev[prev[pos]]]; node[prev3].pile.push(node[pos].pile.top()); node[pos].pile.pop(); } else if(n == 1) { int prev1 = prev[pos]; node[prev1].pile.push(node[pos].pile.top()); node[pos].pile.pop(); } if(!node[pos].pile.empty())//为了填补空位 return; prev[next[pos]] = prev[pos]; next[prev[pos]] = next[pos]; } int main() { int i; card temp; while(1) { int ncount = 0; bool flag = true; for(i = 0; i < 52; i++) { scanf("%s",temp.face); if(temp.face[0] == '#') return 0; while(!node[i].pile.empty()) node[i].pile.pop(); node[i].pile.push(temp); next[i] = i+1; prev[i] = i-1; } // move(5,3); // printf("%s\n%d\n",node[2].pile.top().face,node[2].pile.size()); // cout<<next[4]; // int prev3 = prev[prev[prev[5]]]; // printf("%s\n",node[prev3].pile.top()); while(flag) { int w = 1; for(i = next[0]; i != 52; i = next[i],w++) { int prev1 = prev[i]; int prev3 = prev[prev[prev[i]]]; if(w >= 3) { if((node[prev3].pile.top().face[0] == node[i].pile.top().face[0]) || (node[prev3].pile.top().face[1] == node[i].pile.top().face[1])) { move(i,3); flag = false; break; } } if((node[prev1].pile.top().face[0] == node[i].pile.top().face[0]) || (node[prev1].pile.top().face[1] == node[i].pile.top().face[1])) { move(i,1); flag = false; break; } } if(!flag)//如果没有移动就该停止了; flag = true; else flag = false; } for(i = 0; i != 52; i = next[i]) ncount++; if(ncount == 1) printf("%d pile remaining: %d\n",ncount,node[0].pile.size()); else { printf("%d piles remaining:",ncount); for(int i = 0; i != 52; i = next[i]) printf (" %d",node[i].pile.size()); printf("\n"); } } return 0; }
相关文章推荐
- UVa 127 "Accordian" Patience (模拟链表&栈)
- UVa-127 "Accordian" Patience(栈+模拟链表)
- UVA 127 - "Accordian" Patience---用STL做的(TLE超时)
- UVa:127 "Accordian" Patience
- uva127 "Accordian" Patience poj1214 模拟
- UVa 127 - "Accordian" Patience POJ 1214 链表题解
- [刷题]算法竞赛入门经典(第2版) 6-9/UVa127 - "Accordian" Patience
- UVa OJ 127 - "Accordian" Patience (“手风琴”纸牌)
- UVA 127 "Accordian" Patience
- UVA127 "Accordian" Patience 【模拟】
- UVa 127 "Accordian" Patience (纸牌游戏)
- UVA127- "Accordian" Patience(模拟链表)
- UVa 127: "Accordian" Patience
- UVa 127: "Accordian" Patience
- UVA - 127 "Accordian" Patience
- uva 127 "Accordian" Patience
- uva 127 - "Accordian" Patience
- UVa127,"Accordian" Patience
- uva 127 - "Accordian" Patience
- UVa 127 - "Accordian" Patience