题目
题解
STL。
我一开始直接没看懂,因为我理解成取牌堆顶的一张牌放在牌堆里的合适位置,结果不是,是放在手中的合适位置。按我那样错误的理解的话,会无限循环,我就纳闷怎么还能停止,看了题解才发现自己读错题了。
熟悉一遍vector函数的用法:
1.insert
2.pop_back
3.front
代码
#include<bits/stdc++.h>
using namespace std;
int flag, cnt[15];
char ch;
vector<int> v, ans;
int puke(char ch) {
if(ch == 'J') return 11;
if(ch == 'Q') return 12;
if(ch == 'K') return 13;
return ch - '0';
}
int main()
{
while(cin>>ch) {
if(ch == '0') v.pop_back(), v.push_back(10);
else v.push_back(puke(ch));
}
for(int i = 0;i < v.size();i ++) cnt[v[i]] ++;
for(int i = 1;i <= 13;i ++) if(cnt[i] != 4) flag=1;
if(flag) puts("-1");
else {
while(!v.empty()) {
int t = v.front();
v.erase(v.begin());
if(t >= ans.size()) ans.push_back(t);
else ans.insert(ans.begin()+t, t);
}
for(int i = 0;i < ans.size();i ++) {
if(ans[i] == 13) cout << 'K';
else if(ans[i] == 12) cout << 'Q';
else if(ans[i] == 11) cout << 'J';
else cout << ans[i];
cout << ' ';
}
}
return 0;
}