A - 摆仙果

题目描述

Adrian, Bruno与Goran三人参加了仙界的宴会,宴会开始之前先准备了一些仙果供三人品尝,但是仙果的摆放有顺序要求,如果把仙果摆错了位置,仙果就会消失而无法品尝到。
由于三人是第一次来仙界,也不知道究竟是怎样的摆放方法,它们就按自己的想法摆放仙果。假设仙果种类共有3种,分别记为A,B,C,那么三人的摆放方法分别为
Adrian采用ABCABCABC...的排列方式
Bruno采用BABCBABCBABC...的排列方式
Goran采用CCAABBCCAABB...的排列方式
现在告诉你正确的仙果的摆放方式,请你算一下谁能吃到的仙果最多

数据输入

第1行有一个整数N,表示共有N个仙果。第2行有N个仅由ABC组成的字符,表示仙果正确的摆放位置。
1 ≤N≤100

数据输出

第1行输出一个整数,代表一个人最多有几个仙果摆放正确。接下来的行中,输出摆放仙果数最多的人名,若有多人都摆放对了最多数量的仙果,则按字典序在每行中输出1个名字。

解决方案

  1. 我的方案
#include<bits/stdc++.h>
using namespace std;
char Ad[3]={'A','B','C'};
char Br[4]={'B','A','B','C'};
char Go[6]={'C','C','A','A','B','B'};
bool cmp(const pair<char,int>& a, const pair<char,int>& b){
    if(a.second == b.second) return a.first<b.first;
    return a.second>b.second;
}
map<char,int> c;
int main(){
    c['A']=c['B']=c['G']=0;
    int N;
    string R;
    cin>>N>>R;
    for(int i=0;i<R.length();i++){
        if(R[i]==Ad[i%3])c['A']++;
        if(R[i]==Br[i%4])c['B']++;
        if(R[i]==Go[i%6])c['G']++;
    }
    vector<pair<char,int>> vec(c.begin(),c.end());
    sort(vec.begin(),vec.end(),cmp);
    int biggest=vec[0].second;
    printf("%d\n",biggest);
    if(vec[0].first=='A')printf("Adrian");
    if(vec[0].first=='B')printf("Bruno");
    if(vec[0].first=='G')printf("Goran");
    for(int i=1;i<vec.size();i++){
        if(vec[i].second==biggest){
            if(vec[i].first=='A')printf("\nAdrian");
            if(vec[i].first=='B')printf("\nBruno");
            if(vec[i].first=='G')printf("\nGoran");
        }
    }
    return 0;

}
posted @ 2019-03-20 11:24  MarkKobs  阅读(265)  评论(0编辑  收藏  举报