| ||||||||||
| 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 | |||||||||
怎么可能超时啊!#include<stdio.h>
#include<string.h>
#define N 7
#define M 1000000
char a[N];//store the number to be shreding
int store[N],s[N];//store the final result
int appear[M];
int max,target,n,nparts;
int get_num(int n,int spos)
{
int sum=0;
while(n--)
{
sum=sum*10+a[spos]-'0';
spos++;
}
return sum;
}
void add(int len)
{
int i;
int tempart[N],num,spos;
spos=num=0;
for(i=0;i<len;i++)
{
tempart[i]=get_num(s[i],spos);
num+=tempart[i];
spos=spos+s[i];
}
//for(int f=0;f<len;f++)
//printf("%d ",tempart[f]);
//printf("%d\n",num);
if(max<=num&&num<=target)
{
nparts=len;
max=num;
appear[max]++;
//printf("%d %d",max,appear[max]);
memcpy(store,tempart,sizeof(tempart));
}
return;
}
void dfs(int remain_len,int parts)
{
int i;
if(remain_len==0)
add(parts);
else
for(i=1;i<=remain_len;i++)
{
s[parts]=i;//store the length of each part
dfs(remain_len-i,parts+1);
}
return;
}
int main()
{
int n;
while(scanf("%d %s",&target,a))
{
//printf("%s\n",a);
if(target==0&&a[0]==0)
break;
memset(appear,0,sizeof(appear));
nparts=max=0;
n=strlen(a);
dfs(n,0);
if(max==0)
printf("error\n");
else if(appear[max]>1)
printf("rejected\n");
else
{
printf("%d",max);
for(int i=0;i<nparts;i++)
printf(" %d",store[i]);
printf("\n");
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator