链接: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 }
时间: 2024-11-08 07:02:38