记录编号 33203 评测结果 AAAAAAAAAA
题目名称 方程 最终得分 100
用户昵称 GravatarMakazeu 是否通过 通过
代码语言 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;
}