首页 > 代码库 > UVa127 "Accordian" Patience (模拟)

UVa127 "Accordian" Patience (模拟)

链接:http://acm.hust.edu.cn/vjudge/problem/18732
分析:模拟,用了vector调用erase时可以自动调整大小的特性,居然没T。

 1 #include <cstdio> 2 #include <string> 3 #include <vector> 4 #include <stack> 5 #include <iostream> 6 using namespace std; 7  8 int main() { 9     string s;10     while (cin >> s && s != "#") {11         vector<stack<string> > piles(52);12         piles[0].push(s);13         for (int i = 1; i < 52; i++) {14             cin >> s;15             piles[i].push(s);16         }17         while (true) {18             bool isMove = false;19             for (int i = 0; i < piles.size(); i++) {20                 string& card = piles[i].top();21                 if (i - 3 >= 0) {22                     string& card1 = piles[i - 3].top();23                     if (card[0] == card1[0] || card[1] == card1[1]) {24                         piles[i - 3].push(card);25                         if (piles[i].size() == 1) piles.erase(piles.begin() + i);26                         else piles[i].pop();27                         isMove = true;28                         break;29                     }30                 }31                 if (i - 1 >= 0) {32                     string& card1 = piles[i - 1].top();33                     if (card[0] == card1[0] || card[1] == card1[1]) {34                         piles[i - 1].push(card);35                         if (piles[i].size() == 1) piles.erase(piles.begin() + i);36                         else piles[i].pop();37                         isMove = true;38                         break;39                     }40                 }41             }42             if (!isMove) break;43         }44         cout << piles.size() << " pile" << (piles.size() > 1 ? "s" : "") << " remaining: ";45         for (int i = 0; i < piles.size(); i++) {46             if (i) cout <<  ;47             cout << piles[i].size();48         }49         cout << \n;50     }51     return 0;52 }

 


 

UVa127 "Accordian" Patience (模拟)