得分: 90分
提交日期: 2011-11-8 20:46:00
有效耗时: 750毫秒
测试结果1: 选手程序无输出
测试结果2: 通过本测试点|有效耗时62ms
测试结果3: 通过本测试点|有效耗时47ms
测试结果4: 通过本测试点|有效耗时63ms
测试结果5: 通过本测试点|有效耗时62ms
测试结果6: 通过本测试点|有效耗时63ms
测试结果7: 通过本测试点|有效耗时62ms
测试结果8: 通过本测试点|有效耗时94ms
测试结果9: 通过本测试点|有效耗时94ms
测试结果10: 通过本测试点|有效耗时203ms
就算是太慢了也是超时啊。
类似Floyd的方法。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<fstream>
#define fin cin
//#define fout cout
using namespace std;
int n;
bool map[505][505]={},meet[1005][1005]={};
int main()
{
//fstream fin,fout;fin.open("in.in",ios::in),fout.open("out.out",ios::out);
fin>>n;
int i,k,j,cnt=0,temp;
bool flag=1;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{
fin>>map[i][j];
map[i][j+n]=map[i+n][j]=map[i+n][j+n]=map[i][j];
}
for(i=0;i<(n<<1);++i)
meet[i][i+1]=meet[i+1][i]=1;
for(i=(n<<1)-1;i>-1;--i)
for(j=i+2;j<=i+n;++j)if(!meet[i][j])
for(k=i+1;k<j;++k)
if(meet[i][k])if(meet[k][j])
if(map[i][k]||map[j][k])
meet[i][j]=1;
for(i=0;i<n;++i)
if(meet[i][i+n])
++cnt;
cout<<cnt<<endl;
for(i=0;i<n;++i)
if(meet[i][i+n])
cout<<i+1<<endl;
//system("PAUSE");
return 0;
}