题意:
有N个人,给出他们之间关系图,如果有三人以上同时互为朋友,或同时不互为朋友,则是坏团队。否者为好团队。
思路:超6人以上并是坏团队。6人以下暴力判断。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define LL long long
#define siz 100005
using namespace std;
void scan_d(int &x)
{
char c;
while((c = getchar())<'0'||c>'9');
while(c>='0'&&c<='9')
{
// cout<<x<<"&^________________"<<endl;
x = x*10 +(c - '0'),c = getchar();
}
}
int n;
char s[siz];
int vis[10][10];
bool pd(int i,int j,int k)
{
if(vis[i][j]&&vis[i][k]&&vis[j][k]) return true;
if(!vis[i][j]&&!vis[i][k]&&!vis[j][k]) return true;
return false;
}
void solve()
{
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
for(int k=j+1; k<=n; k++)
{
if(pd(i,j,k))
{
puts("Bad Team!");
return ;
}
}
}
}
puts("Great Team!");
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
scanf("%d\n",&n);
if(n>=6)
{
for(int i=1;i<n;i++)
gets(s);
puts("Bad Team!");
continue;
}
for(int i=1; i<=n-1; i++)
{
for(int j=1; j<=n-i; j++)
{
int x = 0;
scan_d(x);
/// cout<<x<<"*********"<<endl;
vis[i][i+j] = vis[i+j][i] = x;
// cout<<i<<" "<<i+j<<" "<<vis[i][i+j]<<endl;
}
}
solve();
}
return 0;
}