题目:点击打开链接
题意:给定n个员工,每个员工与其他员工之间的关系为朋友或者陌生人(1 或者 0),规定有三个及以上互相为朋友或者互相为陌生人的小团体为Bad Team,否则为Great Team。
思路:拉姆齐定理:6个人中一定有三个互相为朋友或者互相不认识(可通过6个点连线证明)。所以当n>=6直接输出Bad,n<6暴力枚举i,j,k当a[i][j]==a[i][k]&&a[i][j]==a[j][k]&&a[i][k]==a[j][k]则Bad,否则Great。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T,n,a[7][7],x;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(n>=6)
{
for(int i=1; i<=n-1; i++)
for(int j=i+1; j<=n; j++)
scanf("%d",&x);
printf("Bad Team!\n");
}
else
{
for(int i=1; i<=n-1; i++)
for(int j=i+1; j<=n; j++)
{
scanf("%d",&a[i][j]);
a[j][i]=a[i][j];
}
int flag=0;
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)
for(int k=j+1; k<=n; k++)
if(a[i][j]==a[i][k]&&a[i][j]==a[j][k]&&a[i][k]==a[j][k])
{
flag=1;
break;
}
if(flag==1)
printf("Bad Team!\n");
else
printf("Great Team!\n");
}
}
return 0;
}