记录编号 |
33203 |
评测结果 |
AAAAAAAAAA |
题目名称 |
方程 |
最终得分 |
100 |
用户昵称 |
Makazeu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.771 s |
提交时间 |
2011-11-09 18:38:03 |
内存使用 |
0.50 MiB |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
class hugeint
{
public:
int len;
int num[301];
hugeint()
{
len=0;
memset(num,0,sizeof(num));
}
}F[2][101];
int Min(int a,int b)
{
return a<b?a:b;
}
int moderpow(int num,int level,int moder)
{
int temp=1;
while (level)
{
temp=temp*num%moder;
level--;
}
return(temp);
}
hugeint add(hugeint a,hugeint b)
{
int i;
hugeint Ans;
if (a.len>b.len)
Ans.len=a.len;
else
Ans.len=b.len;
for (i=1;i<=Ans.len;i++)
{
Ans.num[i]+=(a.num[i]+b.num[i]);
Ans.num[i+1]+=Ans.num[i]/10;
Ans.num[i]%=10;
}
if (Ans.num[Ans.len+1]>0)
Ans.len++;
return Ans;
}
int main()
{
freopen("equationz.in","r",stdin);
freopen("equationz.out","w",stdout);
int X,K;
scanf("%d %d\n",&K,&X);
X=moderpow(X%1000,X%1000,1000);
bool last=false;
bool now=true;
F[last][1].num[1]=1;
F[last][1].len=1;
int tmp;
for (int i=2;i<=X;i++)
{
now=!last;
if(i<K)
tmp=i;
else
tmp=K;
for(int j=1;j<=tmp;j++)
F[now][j]=add(F[last][j],F[last][j-1]);
last=now;
}
for (int i=F[last][K].len;i>=1;i--)
printf("%d",F[last][K].num[i]);
return 0;
}