https://vjudge.net/problem/UVA-127
水题一道,涉及到的数据结构也就是栈,编完之后输入数据不出结果
先存在这里,然后回过来再找错误吧,做题少就是不行
另外程序有些地方代码过于繁琐,还需改进
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<stack>
using namespace std;
int main()
{
string aline, bline;
while (getline(cin, aline)) {
if (aline == "#") break;
getline(cin, bline);
stack<pair<char, char> > pile[52 + 1];
int k = 0;
stringstream line(aline);
while (line >> aline) pile[++k].push(make_pair(aline[0], aline[1]));
stringstream cline(bline);
while (cline >> bline) pile[++k].push(make_pair(bline[0], bline[1]));
bool ok = true, pos[52 + 1];
for (int i = 1; i <= k; i++) pos[i] = i;
while (k != 1)
{
for (int i = 2; i <= k; i++) {
if (i > 3 && !pile[pos[i]].empty() && !pile[pos[i - 3]].empty()
&& (pile[pos[i]].top().first == pile[pos[i - 3]].top().first
|| pile[pos[i]].top().second == pile[pos[i - 3]].top().second)) {
pile[pos[i - 3]].push(pile[pos[i]].top());
pile[pos[i]].pop();
if (pile[pos[i]].empty()) {
for (int j = i + 1; j <= k; j++)
pos[j - 1] = pos[j];
k--;
}
ok = false; break;
}
if (!pile[pos[i]].empty() && !pile[pos[i - 1]].empty()
&& (pile[pos[i]].top().first == pile[pos[i - 1]].top().first
|| pile[pos[i]].top().second == pile[pos[i - 1]].top().second)) {
pile[pos[i - 1]].push(pile[pos[i]].top());
pile[pos[i]].pop();
if (pile[pos[i]].empty()) {
for (int j = i + 1; j <= k; j++)
pos[j - 1] = pos[j];
k--;
}
ok = false; break;
}
}
if (ok) break;
}
if(k==1) printf("%d pile remaining:", k);
else printf("%d piles remaining:", k);
for (int i = 1; i <= k; i++) printf(" %d", pile[pos[i]].size());
puts("");
}
}
/*
QD AD 8H 5S 3H 5H TC 4D JH KS 6H 8S JS AC AS 8D 2H QS TS 3S AH 4H TH TD 3C 6S
8C 7D 4C 4S 7S 9H 7C 5D 2S KD 2D QH JD 6D 9D JC 2C KH 3D QC 6C 9S KC 7H 9C 5C
AC 2C 3C 4C 5C 6C 7C 8C 9C TC JC QC KC AD 2D 3D 4D 5D 6D 7D 8D TD 9D JD QD KD
AH 2H 3H 4H 5H 6H 7H 8H 9H KH 6S QH TH AS 2S 3S 4S 5S JH 7S 8S 9S TS JS QS KS
#
*/