1018. 锤子剪刀布
⼤家应该都会玩“锤⼦剪⼑布”的游戏:两⼈同时给出⼿势,胜负规则如图所示: 现给出两⼈的交锋记录,请统计双⽅的胜、平、负次数,并且给出双⽅分别出什么⼿势的胜算最⼤。
输⼊格式:
输⼊第1⾏给出正整数N(<=105),即双⽅交锋的次数。随后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
分析:
用map:布B–>0, 锤子C–>1, 剪刀J–>1
(0>1,1>2,2>0)
a1: 甲的布赢的次数 a2: 甲的锤子赢的次数 a3:甲的剪刀赢的次数
b1:乙的布赢的次数 … b2: … b3: …
s1:甲赢的次数 s2:甲平的次数 s3:甲败的次数
ss1:乙赢的次数 ss2: … ss3: …
#include<bits/stdc++.h>
using namespace std;
int a1,a2,a3,b1,b2,b3; //记录甲和乙的 布 石头 剪刀 胜的次数
int s1,s2,s3,ss1,ss2,ss3; //甲和乙 胜 平 败
int t;
char n,m;
map<char,int>mp;
int main(){
cin>>t;
//0>1,1>2,2>0
mp['B']=0,mp['C']=1,mp['J']=2;
for(int i=0;i<t;i++){
cin>>n>>m;
if(mp[n]==mp[m]){
s2++,ss2++;
continue;
}
//甲的布赢了,a1++,s1++; 乙输,ss3++
if(mp[n]==0&&mp[m]==1) a1++,s1++,ss3++;
if(mp[n]==1&&mp[m]==2) a2++,s1++,ss3++;
if(mp[n]==2&&mp[m]==0) a3++,s1++,ss3++;
if(mp[m]==0&&mp[n]==1) b1++,ss1++,s3++;
if(mp[m]==1&&mp[n]==2) b2++,ss1++,s3++;
if(mp[m]==2&&mp[n]==0) b3++,ss1++,s3++;
}
cout<<s1<<" "<<s2<<" "<<s3<<endl;
cout<<ss1<<" "<<ss2<<" "<<ss3<<endl;
if(a1>=a2&&a1>=a3) cout<<'B'<<" ";
else if(a2>=a1&&a2>=a3) cout<<'C'<<" ";
else cout<<'J'<<" ";
if(b1>=b2&&b1>=b3) cout<<'B';
else if(b2>=b1&&b2>=b3) cout<<'C';
else cout<<'J';
}