记录编号 |
110478 |
评测结果 |
AAAAAAAAAAAAAA |
题目名称 |
[暑假培训2012] 残酷的数学老师 |
最终得分 |
100 |
用户昵称 |
slyrabbit |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.499 s |
提交时间 |
2014-07-11 17:09:57 |
内存使用 |
0.37 MiB |
显示代码纯文本
#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;
}