1 solutions

  • 0
    @ 2024-5-18 14:21:41
    #include<bits/stdc++.h>
    using namespace std;
    const int M=15,N=1010;
    int a[M]; //当前这轮的票数 
    bool st[M]; //st[i]=1表示已经出局,st[i]=0还没有出局 
    string s[N]; //s[i]表示第i个评委的选票 
    int main()
    {
    	int m,n;
    	cin>>m>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>s[i];
    	}
    	int cnt=0;//淘汰的人的数目 
    	while(true)
    	{
    		//开始新的一局
    		memset(a,0,sizeof a);
    		for(int i=1;i<=n;i++) //枚举每个人的票 
    		{
    			for(int j=0;j<s[i].size();j++) //依次枚举投票优先级 
    			{
    				int t=s[i][j]-'0';
    				if(t==0) break;
    				if(st[t]==0) //品牌t没有出局 
    				{
    					a[t]++; //给t加一票,然后第i个人的票就用完了
    					break; 
    				}
    			}
    		} 
    		//投票结束
    		//找到票数最低的没有出局品牌的票数
    		int minv=1010;
    		for(int i=1;i<=m;i++)
    		{
    			if(st[i]==0) //当前品牌没有出局 
    			{
    				minv=min(minv,a[i]);
    			}
    		}
    		int c=0; //当前这一轮需要淘汰的品牌的数量 
    		for(int i=1;i<=m;i++)
    		{
    			if(st[i]==0&&a[i]==minv)
    			{
    				st[i]=1;//将i淘汰 
    				c++;
    			}
    		}
    		cnt+=c; //cnt表示淘汰的总的数量
    		if(cnt==m) //品牌全部淘汰 
    		{
    			cout<<-minv;
    			return 0;
    		} 
    		if(cnt==m-1) //说明还剩余一个品牌 
    		{
    			for(int i=1;i<=m;i++)
    			{
    				if(st[i]==0)
    				{
    					cout<<i;
    					return 0;
    				}	
    			} 
    		}
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    654
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    9
    Tags
    # Submissions
    13
    Accepted
    5
    Uploaded By