PAT 1018ハンマーはさみ布
みんなはすべて“ハンマーのはさみの布”のゲームを游ぶべきです:2人は同时にジェスチャーを出して、胜负の规则は図のようです:今2人の交戦の记录をあげて、双方の胜ち、引き分け、负の回数を统计して、しかも双方がそれぞれどんなジェスチャーを出す胜算が最も大きいことをあげてください.入力形式は、1行目に正の整数N(<=105)を入力し、双方が交戦した回数である.その後、N行目には、1行ごとに交戦した情報、すなわち甲、乙双方が同時に与えたジェスチャーが与えられる.Cは「ハンマー」、Jは「はさみ」、Bは「布」を表す1文字目は甲、2文字目は乙、真ん中にスペースが1つあります.出力形式出力1、2行目はそれぞれ甲、乙の勝、平、負の回数を与え、数字間は1つのスペースで区切られる.3行目には2つのアルファベットが与えられ、それぞれ甲、乙の優勝回数が最も多いジェスチャーを表し、真ん中に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
using namespace std;
int change(char c){
//
if(c == 'B') return 0;
if(c == 'C') return 1;
if(c == 'J') return 2;
return -1;
}
int main(){
char mp[3] = {
'B', 'C', 'J'}; // mp[0 ~ 2] BCJ
//countA[0 ~ 2] countB
//victoryA[0 ~ 2] victoryB
int countA[3] = {
0}, countB[3] = {
0}, victoryA[3] = {
0}, victoryB[3] = {
0};
int n; //
cin >> n;
char c1, c2; //
int k1, k2; //k1 , k2
for(int i = 0; i < n; i++){
cin >> c1 >> c2;
k1 = change(c1); //
k2 = change(c2);
/*
,
k1 k2 (k1 + 1) % 3 == k2;
k1 k2 k1 == k2;
k1 k2
0 > 1
1 > 2
2 > 0
k1 (k1 + 1) % 3 == k2 ( QAQ)
, , ~
*/
if((k1 + 1) % 3 == k2){
countA[0]++; //
countB[2]++; //
victoryA[k1]++; // k1
}
else if(k1 == k2){
countA[1]++; //
countB[1]++;
}
else{
countA[2]++; //
countB[0]++; //
victoryB[k2]++; // k2
}
}
cout << countA[0] << " " << countA[1] << " " << countA[2] << endl;
cout << countB[0] << " " << countB[1] << " " << countB[2] << endl;
int max1 = 0, max2 = 0;
for(int i = 1; i < 3; i++){
// ( 0~2 )
if(victoryA[i] > victoryA[max1]) max1 = i;
if(victoryB[i] > victoryB[max2]) max2 = i;
}
cout << mp[max1] << " " << mp[max2] << endl;
// mp BCJ
return 0;
}