提交记录 11358
提交时间 |
评测时间 |
2019-12-08 17:08:49 |
2020-08-01 02:42:40 |
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int MAXN = 3000005;
typedef complex<double> cp;
int n,m,l,lim=1,rev[MAXN],ans[MAXN];
cp f[MAXN],g[MAXN];
string str1,str2;
inline void fft(cp *a,int type)
{
for(int i=0;i<lim;i++)
if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int mid=1;mid<lim;mid<<=1)
{
cp cur(cos(M_PI/mid),type*sin(M_PI/mid));
for(int j=0;j<lim;j+=(mid<<1))
{
cp w(1,0);
for(int k=0;k<mid;++k,w*=cur)
{
cp x=a[j+k],y=w*a[j+k+mid];
a[j+k]=x+y; a[j+k+mid]=x-y;
}
}
}
}
int main()
{
cin>>str1>>str2;
n=str1.length(); m=str2.length();
for(int i=n-1;i>=0;--i) f[n-1-i]=str1[i]-'0';
for(int i=m-1;i>=0;--i) g[m-1-i]=str2[i]-'0';
while(lim<=n+m) lim<<=1,l++;
for(int i=0;i<lim;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<(l-1));
fft(f,1); fft(g,1);
for(int i=0;i<=lim;i++)
f[i]*=g[i];
fft(f,-1);
for(int i=0;i<=lim;i++)
{
ans[i]+=(int)(f[i].real()/lim+0.5);
if(ans[i]>=10)
{
ans[i+1]+=ans[i]/10,ans[i]%=10;
if(i==lim) lim++;
}
}
while(!ans[lim] && lim>=1) lim--; lim++;
for(int i=lim-1;i>=0;i--) printf("%d",ans[i]);
return 0;
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 642.178 ms | 85 MB + 764 KB | Accepted | Score: 100 | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2024-12-05 10:35:08 | Loaded in 7 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠