思路:
首先 卡内存,开个maxn*maxn的数组MLE,用vector 按理说 两两都是朋友也是会爆,但是据说有人用vector暴力水过了
正解是
在组合数学上,拉姆齐(Ramsey)定理是要解决以下的问题:要找这样一个最小的数n,使得n个人中必定有k个人相识或l个人互不相识。
拉姆齐定理的通俗表述:
6 个人中至少存在3人相互认识或者相互不认识。
该定理等价于证明这6个顶点的完全图的边,用红、蓝二色任意着色,必然至少存在一个红色边三角形,或蓝色边三角形。
所以说 这个题 n>=6 直接bad 否则暴力
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=3e3+5;
int a[10][10];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
memset(a,0,sizeof a);
scanf("%d",&n);
if(n>=6)
{
printf("Bad Team!\n");
int x;
for(int i=1;i<n;i++)
for(int j=1;j<=n-i;j++)
scanf("%d",&x);
continue;
}
int flag=1;
for(int i=1;i<n;i++)
for(int j=1;j<=n-i;j++)
{
int x;
scanf("%d",&x);
if(x)
a[i][i+j]=a[i+j][i]=1;
}
int renshi=0,brenshi=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[j][k]||!a[i][j]&&!a[i][k]&&!a[j][k])
flag=0;
if(!flag)
printf("Bad Team!\n");
else printf("Great Team!\n");
}
return 0;
}