[工程师死绝的世界C3003]学べない学校 翻译及题解
没有学生的学校
Translation by KSkun
原题:問題「学べない学校」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜
问题描述
学校里的孩子们在玩剪刀石头布。特别是A君和B君,每天都要来上几盘,两人争来争去非要比个高下。
你知道了两个人的游戏记录,他们想让你写一个程序来判定他们谁最强。
A君和B君一共进行了N次游戏。
你知道了他们进行的游戏次数N以及每一次的状况,你需要写一个统计A君和B君获胜次数的程序。
剪刀石头布有三种手势:剪刀、石头、步。
石头可以赢剪刀,剪刀赢布,布赢石头。
输入中:
- 石头用
g
表示 - 剪刀用
c
表示 - 布用
p
表示
样例1的说明如下图所示。
输入格式
N
a_1 b_1
a_2 b_2
...
a_N b_N
- 第一行包含一个整数N,表示A君和B君游戏的次数。
- 接下来的N行,每行包含两个用半角空格分开的字符a_i和b_i,分别代表A君和B君的出法(字符对应出法参见问题描述)。
- 输入共N + 1行,在输入的最后,包含一个换行符。
输出格式
以以下的格式分别输出A君和B君获胜的次数。
w_a
w_b
- 输出应该包含2行。
- 第一行输出一个整数w_a,表示A君获胜的次数。
- 第二行输出一个整数w_b,表示B君获胜的次数。
- 输出的最后应该包含一个换行符。
条件
- 1 ≦ N ≦ 1000
- a_i和b_i只可能是
g
、c
和p
中的一种。
输入输出样例
输入输出样例1
输入:
3
g g
c p
p g
输出:
2
0
输入输出样例2
输入:
10
p g
c c
p p
g g
c p
c p
g g
p p
g p
p g
输出:
4
1
题解
// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>
#include <algorithm>
typedef long long LL;
inline char fgc() {
static char buf[100000], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
? EOF : *p1++;
}
inline LL readint() {
LL res = 0, neg = 1; char c = fgc();
for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
return res * neg;
}
inline char readsingle() {
char c;
while(!isgraph(c = fgc())) {}
return c;
}
inline int win(char a, char b) {
if(a == b) return 0;
if(a == 'g' && b == 'c') return 1;
if(a == 'c' && b == 'p') return 1;
if(a == 'p' && b == 'g') return 1;
return -1;
}
int n, cnta = 0, cntb = 0;
char wa[5], wb[5];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%s%s", wa, wb);
int res = win(wa[0], wb[0]);
if(res > 0) cnta++;
else if(res < 0) cntb++;
}
printf("%d\n%d\n", cnta, cntb);
return 0;
}