比赛 20140711B班小测 评测结果 AAAWWWWWWAWWWW
题目名称 残酷的数学老师 最终得分 28
用户昵称 slyrabbit 运行时间 0.789 s
代码语言 C++ 内存使用 0.37 MiB
提交时间 2014-07-11 16:14:25
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long a[2501]={0},temp[2501]={0};
char ans[15001];
void work(int p)
{
	long long data[5001]={0};
	while(p)
	{
		if(p&1)
		{
			for(int i=2500;i>0;i--)
			{
				if(a[i]==0)
					continue;
				for(int j=2500;j>0;j--)
				{
					data[i+j]=a[i]*temp[j];
				}
				for(int j=5000;j>0;j--)
				{
					data[j-1]+=data[j]/10000000;
					data[j]=data[j]%10000000;
				}
			}
			for(int j=5000;j>=2500;j--)
			{
				a[j-2500]=data[j];
			}
			memset(data,0,sizeof(data));
			//a*=temp;
		}
		for(int i=2500;i>0;i--)
		{
			if(temp[i]==0)
				continue;
			for(int j=2500;j>0;j--)
			{
				data[i+j]+=temp[i]*temp[j];
			}
			for(int j=5000;j>0;j--)
			{
				data[j-1]+=data[j]/10000000;
				data[j]=data[j]%10000000;
			}
		}//temp*=temp;
		for(int j=5000;j>2500;j--)
		{
			temp[j-2500]=data[j];
		}
		memset(data,0,sizeof(data));
		p>>=1;
	}
}
void putout()
{
	int i0=0;
	for(int i=1;i<=2500;i++)
	{
		if(a[i]!=0)
		{
			i0=i;
			break;
		}
	}
	int t=a[i0],data=0,n=0;
	for(;t>0;data++)
	{
		t/=10;
	}
	for(int i=data;a[i0]>0;)
	{
		ans[i--]+=a[i0]%10+'0';
		a[i0]/=10;
	}
	for(int i=i0+1;i<=2500;i++)
	{
		data+=7;
		for(int j=0;j<7;j++)
		{
			ans[data--]+=a[i]%10+'0';
			a[i]/=10;
		}
		data+=7;
	}
	for(int i=1,s=1;i<=data;i++,s++)
	{
		if(s==70)
		{
			s=1;
			cout<<endl;
		}
		cout<<ans[i];
	}
}
int main()
{
	freopen("cruel1.in","r",stdin);
	freopen("cruel1.out","w",stdout);
	long long x;
	int p;
	cin>>x>>p;
	temp[2500]=x;
	a[2500]=1;
	work(p);
	putout();
	return 0;
}