LSFIGHT - Đấu trường VM08
Tác giả: flashmt
Ngôn ngữ: C++
#include<iostream>
#define maxn 510
int n;
int g(int x)
{
if (x>n) return x-n;
return x<1?x+n:x;
}
int main()
{
int i,j,l,k,x,re,a[maxn][maxn],f[maxn][maxn],r[maxn];
scanf("%d",&n);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
f[i][j]=0;
}
for (i=1;i<=n;i++) f[i][g(i+1)]=1;
for (l=3;l<=n+1;l++)
for (i=1;i<=n;i++)
{
j=i+l-1;
x=g(j);
for (k=i+1;k<j;k++)
if (f[i][g(k)]&f[g(k)][x]&(a[i][g(k)]|a[x][g(k)]))
{
f[i][x]=1; break;
}
}
re=0;
for (i=1;i<=n;i++)
if (f[i][i])
{
re++;
r[re]=i;
}
printf("%d\n",re);
for (i=1;i<=re;i++)
printf("%d\n",r[i]);
return 0;
}