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");
}
}