1 solutions

  • 0
    @ 2025-3-3 16:21:29

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    /*
    m个品牌,n个评委 
    */
    string a[1010];//存储n个评委的评分 
    int n,m; 
    int r[20];//存储投票过程,-1表示被淘汰 
    
    int main(){
    	cin>>m>>n;
    	for(int i = 1;i <= n;i++){
    		cin>>a[i];
    	}
    	
    	while(1==1){
    		//m个品牌每轮都要初始化,把没有被淘汰的得票数清零 
    		for(int i = 1;i <= m;i++){
    			if(r[i] != -1) r[i] = 0;
    		}
    		
    		for(int i = 1;i <= n;i++){
    			//算票
    			string t = a[i];
    			for(int j = 0;j < t.size();j++){
    				char c = t[j] - '0';//获取投了谁
    				if(c == 0) break;//弃权
    				else{
    					//没有被淘汰的计票 
    					if(r[c] != -1){
    						r[c]++;
    						break;
    					} 
    				} 
    			} 
    		}
    		
    		//计算结果:得票最多的和最少的票数 
    		int mi = INT_MAX,ma = INT_MIN; 
    		for(int i = 1;i <= m;i++){
    			if(r[i] != -1){
    				mi = min(mi,r[i]);
    				ma = max(ma,r[i]);
    			}
    		} 
    		
    		if(ma > mi){
    			//淘汰所有最小值 
    			for(int i = 1;i <= m;i++){
    				if(r[i] == mi) r[i] = -1;
    			} 
    		}else{
    			//最后是平票,也就是只有2种情况,要么评选失败
    			//要么只剩1个品牌
    			int cnt = 0;//有几个品牌是最大值 
    			int res = 0; //哪个品牌是最大值
    			
    			for(int i = 1;i <= m;i++){
    				if(r[i] == ma){
    					cnt++;
    					res = i;
    				}
    			} 
    			
    			if(cnt > 1) cout<<0-ma;//评选失败
    			else cout<<res;
    			break; 
    		}
    	} 
    	return 0;
    }
    
    
    • 1

    Information

    ID
    9990
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By