问题标题: 酷町堂:1619 安排座位(plan)

0
0
已解决
黄依成
黄依成
中级天翼
中级天翼
#include<iostream>
using namespace std;
int n,a[55],b[55],ans[55];
bool c[55];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]]++;
	}
	for(int i=1;i<=n/2;i++){
		int maxn=0,pos;
		for(int j=1;j<=50;j++){
			if(b[j]>maxn){
				maxn=b[j];
				pos=j;
			}
		}
		b[pos]=-1; 
		if(!c[a[pos]]){
			ans[pos]=a[pos];
			c[a[pos]]=1;
		}else{
			for(int j=1;j<=n;j++){
				if(c[j]==0){
					ans[i]=a[j];
					break;
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<i<<" "<<ans[i]<<endl;
	}
	return 0;
}

怎么改qwq

黄依成在2020-10-07 19:43:36追加了内容
#include<iostream>
using namespace std;
int n,a[55],b[55],ans[55];
bool c[55];//记录有没有安排同桌 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[a[i]]++;
    }
    for(int i=1;i<=n/2;i++){
        int maxn=0,pos;
        for(int j=1;j<=50;j++){
            if(b[j]>maxn){//找投票最多的人 
                maxn=b[j];
                pos=j;
            }
        }
        b[pos]=-1; //找过后赋值,下次不会找到 
        if(!c[a[pos]]){//如果没有安排座位 
            ans[pos]=a[pos];//记录答案 
            c[a[pos]]=1;//有同桌,记录1 
        }else{//如果已经安排座位
            for(int j=1;j<=n;j++){//找序号最小的人 
                if(c[j]==0){
                    ans[i]=a[j];
                    break;
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<i<<" "<<ans[i]<<endl;
    }
    return 0;
}

是不是写的很乱


0
已采纳
黄子扬
黄子扬
初级天翼
初级天翼

不是,这个结构体一排,邻接矩阵输出不就行了,能把你的思路注释一下吗

黄子扬在2020-10-07 19:41:46追加了内容

邻接矩阵好像不必,当我没说,怕zyf dalao来喷我

0
我要回答