1018 錘子剪刀布 (20)
題目要求
作者 | 單位 | 時間限制 | 內存限制 | 代碼長度限制 |
---|---|---|---|---|
CHEN, Yue | PTA聯盟 | 200ms | 64MB | 16KB |
題目內容:
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第1行給出正整數N(<=10^5^),即雙方交鋒的次數。隨後N行,每行給出一次交鋒的信息,即甲、乙雙方同時給出的的手勢。C代表“錘子”、J代表“剪刀”、B代表“布”,第1個字母代表甲方,第2個代表乙方,中間有1個空格。
輸出格式:
輸出第1、2行分別給出甲、乙的勝、平、負次數,數字間以1個空格分隔。第3行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有1個空格。如果解不唯一,則輸出按字母序最小的解。
輸入樣例
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
輸出樣例
5 3 2
2 3 5
B B
代碼
#include <cstdio>
#include <map>
#include<iostream>
using namespace std;
struct BCJ
{
int win = 0;
int draw = 0;
int fail = 0;
int B = 0;
int C = 0;
int J = 0;
};
void judge(char a, char b, struct BCJ *c, struct BCJ *d)
{
if (a == 'C' && b == 'C'){
c->draw++;
d->draw++;
}
if (a == 'B' && b == 'B'){
c->draw++;
d->draw++;
}
if (a == 'J' && b == 'J'){
c->draw++;
d->draw++;
}
if (a == 'C' && b == 'B'){
c->fail++;
d->win++;
d->B++;
}
if (a == 'C' && b == 'J'){
c->win++;
d->fail++;
c->C++;
}
if (a == 'B' && b == 'J'){
c->fail++;
d->win++;
d->J++;
}
if (a == 'B' && b == 'C'){
c->win++;
d->fail++;
c->B++;
}
if (a == 'J' && b == 'B'){
c->win++;
d->fail++;
c->J++;
}
if (a == 'J' && b == 'C'){
c->fail++;
d->win++;
d->C++;
}
}
char pr(struct BCJ a)
{
if (a.B >= a.C && a.B >= a.J)
return 'B';
if (a.C > a.B && a.C >= a.J)
return 'C';
if (a.J > a.B && a.J > a.C)
return 'J';
}
int main(int argc, char const *argv[])
{
int i;
scanf("%d",&i);
struct BCJ c,d;
char a,b;
while(i--)
{
cin >> a >> b;
judge(a,b,&c,&d);
}
printf ("%d %d %d\n",c.win,c.draw,c.fail);
printf ("%d %d %d\n",d.win,d.draw,d.fail);
printf ("%c %c",pr(c),pr(d));
return 0;
}