题解 P6427 【[COCI2008-2009#1] PTICE】
首先先要得出这三个人的循环节,分别为:ABC,BABC与CCAABB。然后就用这三个不同的循环节去比较正确答案。其中需要注意的是,在得出最高的正确数后,还要判断有几个人都获得了最高的分数,也就是说,输出的姓名不只
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,ans[3],num = 0;string str,d[3] = {"ABC","BABC","CCAABB"},name[3] = {"Adrian","Bruno","Goran"};
cin>>n>>str;
for(int i = 0;i < 3;i++)
{
ans[i] = 0;//每个人的答案初始化
for(int j = 0;j <= str.size() - 1;j++)
if(str[j] == d[i][j % d[i].size()]) ans[i]++;//依次比较循环节
num = max(num,ans[i]);//记录最高的正确数量
}
cout<<num<<endl;
for(int i = 0;i < 3;i++)//可能不只一个
if(ans[i] == num) cout<<name[i]<<endl;
return 0;
}