比赛 20111104 评测结果 AAAAAAAAAA
题目名称 方程 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-04 21:57:08
显示代码纯文本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max(a,b) a>b?a:b
#define BASE 10000

FILE *fi=fopen("equationz.in","r");
FILE *fo=fopen("equationz.out","w");

struct Num
{
	int len;
	int num[300];
	Num()
	{
		len=0;
		for(int i=0;i<=299;i++)
		{
			num[i]=0;
		}
	}
};

Num add(Num a,Num b)
{
	int i,len;
	Num c;
	len=max(a.len,b.len);
	for(i=1;i<=len;i++)
	{
		c.num[i]+=a.num[i]+b.num[i]; 
		if(c.num[i]>=BASE)
		{		
			c.num[i+1]+=c.num[i]/BASE ; 
			c.num [i]%= BASE ; 
		} 
	}
	c.len=len;  
	while(c.num[c.len+1]>0)
		c.len++; 
	return c;
}

void output(Num a)
{
	int i;
	fprintf(fo,"%d",a.num[a.len]);
	for(i=a.len-1;i>0;i--)
	{
		fprintf(fo,"%04d",a.num[i]);
	}
	fprintf(fo,"\n");
}

int k,x,n;

Num ans[1001][101];

int main() 
{
	int i,j,t;
	fscanf(fi,"%d%d",&k,&x);
	n=1;
	t=x%1000;
	for(i=1;i<=t;i++)
		n=(n*t)%1000;
	ans[1][1].len=1;
	ans[1][1].num[1]=1;
	for(i=2;i<=n;i++)
	{
		for(j=1;j<=k;j++)
		{
			ans[i][j]=add(ans[i-1][j-1],ans[i-1][j]);
		}
	}
	output(ans[n][k]);
	return 0;
}