记录编号 77831 评测结果 AAAAAAAAAA
题目名称 方程 最终得分 100
用户昵称 GravatarLauncher 是否通过 通过
代码语言 C++ 运行时间 1.082 s
提交时间 2013-11-02 19:20:36 内存使用 2.22 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int k,x,n,m;
//short f[1002][1002][500]={0};
short f1[1002][500]={0},f2[1002][500]={0};
int Max(int x,int y)
{
	if (x>y)
		return x;
	else 
		return y;
}
void add1(int y)
{
	int i,j,l,c,t;
	l=Max(f2[y-1][0],f2[y][0]);
	t=0;
	for (i=1;i<=l;i++)
	{
		c=f2[y-1][i]+f2[y][i]+t;
		f1[y][i]=c%10;
		t=c/10;
	}
	f1[y][0]=l;
	if (t!=0)
	{
		f1[y][0]=l+1;
		f1[y][l+1]=t;
	}
}
void add2(int y)
{
	int i,j,l,c,t;
	l=Max(f1[y-1][0],f1[y][0]);
	t=0;
	for (i=1;i<=l;i++)
	{
		c=f1[y-1][i]+f1[y][i]+t;
		f2[y][i]=c%10;
		t=c/10;
	}
	f2[y][0]=l;
	if (t!=0)
	{
		f2[y][0]=l+1;
		f2[y][l+1]=t;
	}
}
int main()
{
	freopen("equationz.in","r",stdin);
	freopen("equationz.out","w",stdout);
	cin>>k>>m;
	int i,j;
	m%=1000;
	n=m;
	for (i=1;i<m;i++)
		n=(n*m)%1000;
	if (n<k)
	{
		cout<<0<<endl;
		return 0;
	}
	if (n==k)
	{
		cout<<1<<endl;
		return 0;
	}
	
	f2[1][1]=1;
	f2[1][0]=1;
	for (i=2;i<=n;i++)
	{
		if (i%2==0)
			for (j=1;j<=i;j++)
				add1(j);
		if (i%2!=0)
			for (j=1;j<=i;j++)
				add2(j);
	}
	int p,q;
	p=n;
	q=k;
	if (n%2==0)
		for (i=f1[q][0];i>=1;i--)
		{
			cout<<f1[q][i];
		}
	if (n%2!=0)
		for (i=f2[q][0];i>=1;i--)
		{
			cout<<f2[q][i];
		}		
	return 0;
}