[COCI2015-2016#1] KARTE
题目描述
这里有一堆牌,可惜它们似乎不全。
您需要找出每种花色缺失的张数。
如果有相同的扑克牌,请输出 GRESKA
。
输入格式
您要读取的是一个字符串 s s 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
%
100\%
100% 的数据,保证
1
≤
∣
s
∣
≤
1
0
3
1\le \lvert s\rvert\le 10^3
1≤∣s∣≤103 且
s
s
s 中仅含有数字与 P
,K
,H
,T
,每张牌的点数
∈
[
1
,
13
]
\in [1,13]
∈[1,13] 。
【说明】
本题满分 50 50 50 分。
本题译自 Croatian Open Competition in Informatics 2015/2016 Contest #1 T1 KARTE。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p[14],k[14],h[14],t[14];
ll ansp=13,ansk=13,ansh=13,anst=13;
int main()
{
char tmp;
while(cin>>tmp)
{
ll x;
cin>>x;
if(tmp=='P') p[x]++,ansp--;
else if(tmp=='K') k[x]++,ansk--;
else if(tmp=='H') h[x]++,ansh--;
else if(tmp=='T') t[x]++,anst--;
if(p[x]>1||k[x]>1||h[x]>1||t[x]>1)
{
puts("GRESKA");
return 0;
}
}
cout<<ansp<<" "<<ansk<<" ";
cout<<ansh<<" "<<anst<<" ";
return 0;
}