1018 锤子剪刀布

题目:

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

FigCJB.jpg

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第 1 行给出正整数 N(105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。

输出格式:

输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。

 

题解:

若一方没有获胜情况,则输出这一方出过的最小的字母。

 

代码:

复制代码
#include<stdio.h>
#include<iostream>
#include<unordered_map>
using namespace std;
int main(){
    int n,a1 = 0,a2 = 0,a3 = 0,b1 = 0,b2 = 0,b3 = 0,max=0;
    char a,b,x,y;
    bool c=0,j=0,B=0,cc=0,jj=0,bb=0;
    unordered_map<char,int> ha,hb;
    cin>>n;
    while(n--){
        cin>>a>>b;
        if(a == 'B'){
            B = 1;
            if (b == 'J'){
                jj = 1;
                b1 ++;
                a3 ++; 
                if(hb.count('J')){
                    hb['J'] ++;
                }
                else{
                    hb.insert({'J',1});
                }
            }
            if (b == 'B'){
                bb = 1;
                a2 ++;
                b2 ++;
            }
            if (b == 'C'){
                cc = 1;
                a1 ++;
                b3 ++;
                if(ha.count('B')){
                    ha['B']++;
                }else{
                    ha.insert({'B',1});
                }
            }
        }
        if (a == 'J'){
            j = 1;
            if (b == 'C'){
                cc = 1;
                b1 ++;
                a3 ++;
                if(hb.count('C')){
                    hb['C']++;
                }else{
                    hb.insert({'C',1});
                }
            }
            if (b == 'J'){
                jj = 1;
                b2 ++;
                a2 ++;
            }
            if (b == 'B'){
                bb = 1;
                a1 ++;
                b3 ++;
                if(ha.count('J')){
                    ha['J']++;
                }else{
                    ha.insert({'J',1});
                }
            }    
        }
        if (a == 'C'){
            c = 1;
            if (b == 'B'){
                bb = 1;
                b1 ++;
                a3 ++;
                if(hb.count('B')){
                    hb['B']++;
                }else{
                    hb.insert({'B',1});
                }
            }
            if (b == 'C'){
                cc = 1;
                b2 ++;
                a2 ++;
            }
            if (b == 'J'){
                jj = 1;
                a1 ++;
                b3 ++;
                if(ha.count('C')){
                    ha['C']++;
                }else{
                    ha.insert({'C',1});
                }
            }
        }
    }
    cout<<a1<<" "<<a2<<" "<<a3<<endl;
    cout<<b1<<" "<<b2<<" "<<b3<<endl;
    for (unordered_map<char, int>::iterator it = ha.begin(); it != ha.end(); it++) {
        if(it -> second > max){
            max = it -> second;
            x = it -> first;
        }
        if(it -> second == max && it -> first < x){
            x = it -> first;
        }
    }
    if(max == 0){
        B == 0 ? (c == 0 ? (j == 0 ? : x = 'J'): x = 'C'): x = 'B' ;
    }
    max = 0;
    for (unordered_map<char, int>::iterator it = hb.begin(); it != hb.end(); it++) {
        if(it -> second > max){
            max = it -> second;
            y = it -> first;
        }
        if(it -> second == max && it -> first < y){
            y = it -> first;
        }
        
    }
    if(max == 0){
        bb == 0 ? (cc == 0 ? (jj == 0 ? : y = 'J'): y = 'C'): y = 'B' ;
    }
    
    cout<<x<<" "<<y;
    return 0;
}
复制代码

 

posted @   Yohoc  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示