社区讨论

数蒟略弱(?)

P13493【MX-X14-T3】心电感应参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mdk6u20a
此快照首次捕获于
2025/07/26 19:49
7 个月前
此快照最后确认于
2025/11/04 03:41
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[24][24];
int st[24],b[24];
int cnt,ans,res,js;

void check(int x)
{
	for(int i=1;i<=n;i++)
	{
		ans=0;
		if(i==x)
		  continue ;
		for(int j=1;j<=m;j++)
		  if(a[x][j]!=a[i][j])
			  ans=1;
		if(!ans)
		{
			cout<<-1<<' ';
			return ;
		}		  
	}
	
	cnt=0;
	ans=114514;
	while(cnt<=1000)//对于每个人只跑了1000次就得到了最佳答案,但一共有 $ 2^20 $ 种可能
	{
		memset(st,0,sizeof st);
		st[0]=1;
		random_shuffle(b,b+m);
		cnt++;
		res=0;
		js=n-1;
		st[x]=1;
	//	cout<<999;
		int y=0;
		while(js)
		{
			while(st[y]!=0)
			  y=rand()%n+1;//,cout<<y<<"] ";
			//st[y]=1;js--;  
			//cout<<y<<' '<<js<<"; ";
			for(int i=1;i<=n;i++)
			  if(a[i][b[res]]!=a[x][b[res]]&&st[i]==0)
				  js--,st[i]=1;//cout<<i<<' '; 
					 
			res++;	  
		}
		ans=min(ans,res);
		//cout<<"|"<<ans<<"|\n";
	}
	cout<<ans<<' ';
}

int Main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	  for(int j=1;j<=m;j++)
	    cin>>a[i][j];
	for(int i=0;i<m;i++)
	  b[i]=i+1;
	  
	if(n==1)
	  cout<<0;
	else	   
	  for(int i=1;i<=n;i++)
		  check(i);
	
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...