题解 P6427 【[COCI2008-2009#1] PTICE】

· · 题解

首先先要得出这三个人的循环节,分别为:ABCBABCCCAABB。然后就用这三个不同的循环节去比较正确答案。其中需要注意的是,在得出最高的正确数后,还要判断有几个人都获得了最高的分数,也就是说,输出的姓名不只1个,这一点需要额外注意

#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;
}