http://acm.hdu.edu.cn/showproblem.php?pid=6152
给一张图,0代表不是朋友,1代表是朋友,问存不存在至少有三人互相不是朋友或者是互相是朋友的情况。
模拟暴力,套三层循环,枚举三个不同的人来判断,注意要剪枝避免重复计算。
关键:这道题里 朋友的朋友不是朋友,天哪。。。
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<map>
#include<cstdio>
using namespace std;
bool ma[3333][3333];
int main(){
int t;
cin>>t;
while(t--)
{
int n;
int i,j,k;
int fr;
scanf("%d",&n);
memset(ma,0,sizeof(ma));
for(i=1;i<=n;i++)
ma[i][i]=1;
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
scanf("%d",&fr);
ma[i][j+i]=ma[j+i][i]=fr;
}
}
bool flag=1;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
if(j!=i)
{
for(k=j;k<=n;k++)
{
if(k!=j)
{
if(ma[i][j]==1&&ma[i][k]==1&&ma[j][k]==1)
{
flag=0;
break;
}
if(ma[i][j]==0&&ma[i][k]==0&&ma[j][k]==0)
{
flag=0;
break;
}
}
}
if(flag==0)break;
}
}
if(flag==0)break;
}
if(flag) cout<<"Great Team!"<<endl;
else cout<<"Bad Team!"<<endl;
}
return 0;
}