1 条题解

  • 0
    @ 2023-6-11 12:21:10

    C++ :

    #include <iostream>
    using namespace std;
    
    int main(){
    	int m,n;
    	cin>>m>>n;
    	string str[n+1];
    	for(int i=1;i<=n;i++){
    		cin>>str[i];
    	}
    	int a[m+1];//记录投票过程,-1代表淘汰
    	while(true){
    		for(int i=1;i<=m;i++){
    			//重新计票,所有没有被淘汰的票数归零
    			if(a[i]!=-1)a[i]=0;
    		}
    		for(int i=1;i<=n;i++){
    			//计票
    			string s=str[i];
    			for(int j=0;j<s.size();j++){
    				char t=s[j]-'0';
    				if(t==0){
    					//如果为0 说明弃权
    					break;
    				}else{
    					//不为0,则代表要给t投票,如果t没有被淘汰则给它投票
    					if(a[t]>=0){
    						a[t]=a[t]+1;
    						break;
    					}
    				}
    			}
    		}
    		
    		int min=m+1;
    		int max=0;
    		for(int i=1;i<=m;i++){
    			if(a[i]>=0){
    				if(min>a[i]) min=a[i];
    				if(max<a[i])max=a[i];
    			}
    		}
    		
    		if(max>min){
    			//最大值比最小值大,需要将所有最小值的淘汰
    			for(int i=1;i<=m;i++){
    				if(a[i]==min)a[i]=-1;
    			}
    		}else{
    			//最大值和最小值相等说明平票
    			int count=0;
    			int dx=0;
    			for(int i=1;i<=m;i++){			
    				if(a[i]==max){
    					count++;
    					dx=i;
    				}
    			}
    			if(count>1){
    				//如果数量多,说明评选失败
    				cout<<0-max;
    			}else{
    				cout<<dx;
    			}
    			break;
    		}
    	}
    	cin>>m;
    }
    
    • 1

    【基础】评选最佳品牌:king.cpp

    信息

    ID
    2674
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者