1 条题解

  • 0
    @ 2025-8-24 22:29:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Thomas_Cat
    越学越菜。

    搬运于2025-08-24 22:29:13,当前版本为作者最后更新于2021-03-19 14:51:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    标题名字奇奇怪怪(

    这题思路其实很简单。

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

    但是有下面几个坑点:

    • 对于每一组输入数据 x,yx,y,会有下面的可能:

      • x,y∉{w}x,y \not\in \{w\}
      • si=6590cis \ne \sum\limits_{i=65}^{90}c_i

    思路很简单,就是直接用 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;
    }
    
    • 1

    信息

    ID
    6432
    时间
    1000ms
    内存
    64MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者