题目描述

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; }
05-11 16:04