| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛们能不能帮我看看这个程序为什么tle?我怎么算来复杂度都没那么高啊……#include <iostream>
#include <string.h>
using namespace std;
char s[5][5];
bool flag[5][5];
long tot=0;
bool connect()
{
static int dx[4]={0,1,0,-1};
static int dy[4]={1,0,-1,0};
bool boolean[5][5];
int px[10],py[10],h,l,x,y;
memset(boolean,false,sizeof(boolean));
for(int i=0;i<25;i++)
if (flag[i/5][i%5])
{
boolean[i/5][i%5]=true;
h=0;l=1;
px[0]=i/5;py[0]=i%5;
while (h<l)
{
for(int j=0;j<4;j++)
{
x=px[h]+dx[j];y=py[h]+dy[j];
if (flag[x][y]&&x>=0&&x<5&&y>=0&&y<5&&!boolean[x][y])
{
px[l]=x;py[l]=y;
boolean[x][y]=true;
l++;
}
}
h++;
}
if (l>=7) return true;
else return false;
}
}
bool overnum()
{
int i,t=0;
for(i=0;i<25;i++)
if (flag[i/5][i%5]&&s[i/5][i%5]=='J')
t++;
if (t>3) return true;
else return false;
}
void work()
{
int i[8],j;
for(i[1]=0;i[1]<25-6;i[1]++)
for(i[2]=i[1]+1;i[2]<25-5;i[2]++)
for(i[3]=i[2]+1;i[3]<25-4;i[3]++)
for(i[4]=i[3]+1;i[4]<25-3;i[4]++)
for(i[5]=i[4]+1;i[5]<25-2;i[5]++)
for(i[6]=i[5]+1;i[6]<25-1;i[6]++)
for(i[7]=i[6]+1;i[7]<25;i[7]++)
{
for(j=1;j<=7;j++)
flag[i[j]/5][i[j]%5]=true;
if (connect()&&overnum()) tot++;
for(j=1;j<=7;j++)
flag[i[j]/5][i[j]%5]=false;
}
}
main()
{
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
for(int i=0;i<5;i++)
scanf("%s",s[i]);
memset(flag,false,sizeof(flag));
work();
printf("%d\n",tot);
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator