记录编号 34198 评测结果 AAAAAAAAAA
题目名称 方程 最终得分 100
用户昵称 GravatarQhelDIV 是否通过 通过
代码语言 C++ 运行时间 1.831 s
提交时间 2011-12-03 16:53:04 内存使用 1.82 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long Loo=1;
long long C[2][1001][101],L[1001];
long long x,K,g;
int main()
{
freopen("equationz.in","r",stdin);  
freopen("equationz.out","w",stdout); 
long long i,j,k;
for(i=1;i<=18;i++)
	Loo*=10;
	cin>>K>>x;C[0][0][1]=1;C[1][0][1]=1;
	x%=1000;
	int g=x;
	for(i=1;i<x;i++)
	{
		g*=x;
		g%=1000;
	}
	L[1]=1;
	for(i=1;i<g;i++)
	{
		int pos=i % 2;
		for(j=1;j<=i;j++)
		{
			C[pos][j][1]=0;
			int sed=(L[j]>L[j-1]?L[j]:L[j-1]);
			for(k=1;k<=sed;k++)
			{
				C[pos][j][k]+=C[!pos][j-1][k]+C[!pos][j][k];
				C[pos][j][k+1]=C[pos][j][k]/Loo;
				C[pos][j][k]%=Loo;
			}
			if(C[pos][j][sed+1]!=0)
				sed++;
			L[j]=sed;
		}
	}
	if(g==0)
		cout<<0;
	else
	{
	cout<<C[(g-1)%2][K-1][L[K-1]];
	for (i=L[K-1]-1;i>=1;i--)  
        printf("%018lld",C[(g-1)%2][K-1][i]);
	}
	fclose(stdin);  
    fclose(stdout);
	return 0;
}