记录编号 352188 评测结果 AAAAAAAAAA
题目名称 最优分解方案II 最终得分 100
用户昵称 GravatarZwoi_只会打表抄代码的蒟蒻 是否通过 通过
代码语言 C 运行时间 0.002 s
提交时间 2016-11-16 22:00:33 内存使用 0.33 MiB
显示代码纯文本
#include <stdio.h>
int n,tail,i,t;
int sum[1010],a[10010],j;
int main()
{
	freopen("maxmul.in","r",stdin);
	freopen("maxmul.out","w",stdout);
	scanf("%d",&n);
	if(n==1)
	{
		printf("1\n1");
		return 0;
	}
	if(n==2)
	{
		printf("0 2\n0");
		return 0;
	}
	if(n==3)
	{
		printf("1 2\n2");
		return 0;
	}
	if(n==4)
	{
		printf("1 3\n3");
		return 0;
	}
	a[1]=2;
	t=n;
    for(i=2;;i++)
	{
		t-=a[i-1];
		if(t>a[i-1])
			a[i]=a[i-1]+1;
		else
		{
			if(t)
				for(j=i-1;j>0;j--)
			    {
					a[j]++;
				    t--;
				    if(!t)
						break;
				    if(j==1)
						j=i-1;
			    }
			tail=i-1;
			break;
		}
	}
	t=10009;
	sum[t]=1;
	for(i=1;i<=tail;i++)
	{
		printf("%d ",a[i]);
		for(j=t;j<=10009;j++)
			sum[j]*=a[i];
		j=10009;
		while(sum[j]||j>=t)
		{
			sum[j-1]+=sum[j]/10;
			sum[j]%=10;
			j--;
		}
		t=j+1;
	}
	printf("\n");
	for(i=t;i<=10009;i++)
		printf("%d",sum[i]);
	return 0;
}