2020牛客暑期多校训练营(第四场)——I Investigating Legions

Investigating Legions

题目描述

输入描述

 

输出描述

输入

1
10 20
101110101010101010100010010101010100101010010

输出

0 0 1 0 1 0 1 0 1 0

备注

The sample input does not follow the input format, and it won't appear in the final test. The parameter is n=10,m=2,S=20.

题目大意

题解

我们假设若条件的一半及以上都是正确的,随大流,及本条也正确,反之不正确。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=310;
int f[MAXN][MAXN],a[MAXN];
char ff[MAXN*MAXN];
vector<int> vec;
int main()
{
	int t,n,s;
	for(scanf("%d",&t);t--;)
	{
		scanf("%d%d%s",&n,&s,ff);
		int cnt=0,num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)f[i][j]=f[j][i]=ff[cnt++]-'0';
			f[i][i]=1;
		}cnt=0;
		fill(a,a+1+n,-1);
		for(int i=0;i<n;i++)
		{
			vec.clear();
			if(a[i]!=-1)continue;
			for(int j=0;j<n;j++)
				if(f[i][j]&&a[j]==-1)vec.push_back(j);
			for(int j=0;j<n;j++)
			if(a[j]==-1)
			{
				num=0;
				for(int k=0;k<vec.size();k++)if(f[vec[k]][j])num++;
				if(num>=vec.size()/2) a[j]=cnt;
			}
			cnt++;
		}
		for(int i=0;i<n;i++)printf("%d ",a[i]);
		printf("\n");
	}
}

猜你喜欢

转载自blog.csdn.net/cxkdad/article/details/107498423