题目链接:P6529 [COCI2015-2016#1] KARTE - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
这里有一堆牌,可惜它们似乎不全。
您需要找出每种花色缺失的张数。
如果有相同的扑克牌,请输出 GRESKA。
输入格式
您要读取的是一个字符串 s,每三个字符为一张扑克牌。
对于每一张扑克牌:
- 第一位为花色,用
P
,K
,H
,T
表示,且输出也是这个顺序。 - 接下来两位,为这张牌的点数,个位数会在十位补零。
输出格式
如果有相同的扑克牌,请输出 GRESKA。
否则按 P,K,H,T 的顺序,输出该花色缺的牌数。
样例 #1
样例输入 #1
P01K02H03H04
样例输出 #1
12 12 11 13
样例 #2
样例输入 #2
H02H10P11H02
样例输出 #2
GRESKA
样例 #3
样例输入 #3
P10K10H10T01
样例输出 #3
12 12 12 12
提示
【样例解释】
样例 1 解释
有一张花色为 P 的牌,一张花色为 K 的牌,两张花色为 H 的牌。
样例 2 解释
这里有两张 H02 ,所以输出 GRESKA。
【数据范围及限制】
对于 100% 的数据,保证 1 <= |s| <= 10^3 且 s 中仅含有数字与 P,K,H,T,每张牌的点数 ∈ [1,13]。
【说明】
本题满分 50 分。
本题译自 Croatian Open Competition in Informatics 2015/2016 Contest #1 T1 KARTE。
AC code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>using namespace std;int main()
{int p = 13 , k = 13 , h = 13 , t = 13;string s;cin>>s;unordered_set<string> a;for(int i = 0 ; i < s.size() ; i += 3){string tt;tt = tt + s[i] + s[i + 1] + s[i + 2]; // 注意不能写成 tt += s[i] + s[i + 1] + s[i + 2];if(a.find(tt) != a.end()){cout<<"GRESKA"<<endl;return 0;}a.insert(tt);switch(s[i]){case 'P': -- p; break;case 'K': -- k; break;case 'H': -- h; break;case 'T': -- t; break;}}cout<<p<<" "<<k<<" "<<h<<" "<<t<<endl;return 0;
}