题解 P7369【 [COCI2018-2019#4] Elder】

· · 题解

标题名字奇奇怪怪(

这题思路其实很简单。

设现在的赢家为 w,经手人数为 s,经手的人(字符串)用 c_i 表示(i 表示经手的人,这里用 (int)i 来存入数组,c_i \in \{0,1\}0 表示没有经手,1 反之)。

但是有下面几个坑点:

思路很简单,就是直接用 winner 数组和 sum 数组标记即可。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a;
    cin>>a;
    int n,sum=1;//同下,已经有人使用过,直接标记为1
    cin>>n;
    char winner=a;
    int flag[10001]={0};
    flag[(int)a]=1;//注意要先标记这里的一开始掌管者已经使用了
    for(int i=1;i<=n;i++){
        char x,y;
        cin>>x>>y;
        if(winner!=x&&winner!=y) continue;
        else{
            if(winner==y){
                if(flag[(int)x]==0){//如上所述,上面的字符串用flag数组表示
                    flag[(int)x]=1;//同理
                    sum++;      
                }
                winner=x;//注意标记赢者
            }
        }
    }
    cout<<winner<<endl;//输出
    cout<<sum;
    return 0;
}