#include <iostream>
#include <stack>
#include <cstdio>
#include <vector>
using namespace std;
struct card{
char v, s;
}c;
bool is_much(card a, card b){
if(a.v == b.v || a.s == b.s)
return true;
return false;
}
int main()
{
stack<card> s;
vector<stack<card>> piles;
while(scanf("%c%c", &c.v, &c.s) && c.v != '#'){ //uva 的输入格式经常让我头大;
getchar();
s.push(c);
piles.push_back(s);
s.pop();
if(piles.size() == 52){
while(1){
int i;
for(i = 1; i != piles.size(); ++i){
if(i >= 3 && is_much(piles[i].top(), piles[i-3].top())){
piles[i-3].push(piles[i].top());
piles[i].pop();
break; //移动卡牌之后,跳出循环,重新判断有没有新的匹配
}
if(is_much(piles[i].top(), piles[i-1].top())){
piles[i-1].push(piles[i].top());
piles[i].pop();
break;
}
}
if(i == piles.size())
break;
if(piles[i].empty()){
piles.erase(piles.begin()+i); //出现空白后,右边元素统一向左移动,这里体现了用vector的巧妙之处;
}
}
cout << piles.size() << ' ' << (piles.size() == 1 ? "pile remaining:" : "piles remaining:");
for(int i = 0; i != piles.size(); ++i)
cout << ' ' << piles[i].size();
cout << endl;
piles.clear();
}
}
return 0;
}
uva 127
最新推荐文章于 2022-01-20 14:21:02 发布