pku上3378--crazy thairs老说我Output Limit Exceeded ,帮帮忙
#include"stdio.h"
#include"stdlib.h"
#define M 50000
int trace(long a[],int x[],int t,int n,long double &count)
{
int i,j,flag=0,z=0,tf=0,c=0,s=0,tmp[5]={0};
if(t>n)
{
//printf("%d ",x[0]);
if(x[0])
{
tmp[c++]=a[0];//printf("tmp:%d ",tmp[0]);
}
for(i=1;i<=n;i++)
{ //printf("%d ",x[i]);
if(c<=5&&x[i])
{
if(a[i]>tmp[c-1]&&a[i]<=n+1)
{
tmp[c++]=a[i];
// printf("tmp:%d c:%d ",tmp[c-1],c);
}//if
}//if
if(c==5&&x[i+1])
{
//printf("\n");
return 0;
}
}//for
if(c==5)
{
count++;
//printf("---------%d ",count);
}//printf("\n");
}//if
else
for(i=0;i<=1;i++)
{
x[t]=1-i;
if(!x[t]&&t!=0)
{
for(j=t-1;j>=0;j--)
if(x[j]==0) z++;
}
if(n-z<4) return 0;
if(x[t]&&a[t]<=n+1&&t!=0)
{
for(j=t-1;j>=0;j--)
{
if(x[j])
{
flag=1;
if(a[t]>a[j]){//printf("* ");
trace(a,x,t+1,n,count);
break;}
}
}//for
if(!flag) trace(a,x,t+1,n,count);
}
else if(!x[t]||t==0) {
//printf("** ");
trace(a,x,t+1,n,count);}
}
return 0;
}
int main()
{
int c,n;
scanf("%d",&n);
while(n)
{
long double count=0;
if(n<5) {printf("%d\n",count);continue;}
long a[M]={0};
int i,j,x[M+1]={0},temp=0;
//g[M]={0};
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
trace(a,x,0,n-1,count);
printf("%.0f\n",count);
scanf("%d",&n);
//getchar();while (scanf("%d",&n )!= EOF )
// n=getchar();
}
return 0;
}