记录编号 |
32477 |
评测结果 |
AAAAAAAAAA |
题目名称 |
方程 |
最终得分 |
100 |
用户昵称 |
Czb。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.197 s |
提交时间 |
2011-11-07 07:20:07 |
内存使用 |
116.34 MiB |
显示代码纯文本
#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;
}