luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
模板
嗯
做多项式乘法,进位
没了
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define pi acos(-1.0)
inline int read() {
    int x = 0,f = 1;
    char c = getchar();
    while(c < '0' || c > '9')c = getchar();
    while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
    return x * f;
}
const int maxn = 400007;
struct cp {
    double x,y;
    cp (double a = 0,double b = 0): x(a),y(b) {};
} A[maxn],B[maxn];
cp operator + (cp a,cp b) { return cp(a.x + b.x,a.y + b.y);}
cp operator - (cp a,cp b) { return cp(a.x - b.x,a.y - b.y);}
cp operator * (cp a,cp b) { return cp(a.x * b.x - a.y * b.y,a.x * b.y + a.y * b.x); }
void fft(cp *a,int n, int type) {
    for(int i = 0,j = 0;i < n;++ i)  {
        if(i < j) std::swap(a[i],a[j]);
       		for(int k = n >> 1;(j ^= k) < k;k >>= 1);
    }
    for(int m = 2;m <= n;m <<= 1) {
        cp w1 = cp(cos(2 * pi / m),type * sin(2 * pi / m));
        for(int i = 0;i < n;i += m) {
            cp w = cp(1.0,0);
            for(int k = 0;k < (m >> 1);++ k) {
                cp t = w * a[i + k + (m >> 1)],u = a[i + k];
                a[i + k] = u + t;
                a[i + k + (m >> 1)] = u - t;
                w = w * w1;
            }
        }
    }
}
int c[maxn];
char s1[maxn],s2[maxn];
int main() {
    int n = read(); --n;
    scanf("%s%s",s1,s2);
    for(int i  = 0;i <= n;++ i) A[i].x = s1[n - i] - '0',B[i].x = s2[n -i] - '0';
    int tmp = n;
    //printf("%d\n",n);
    for(n = 1;n <= tmp * 2;n <<= 1);
    //printf("%d\n",n);
    fft(A,n,1);
    fft(B,n,1);
    /*for(int i = 0;i <= n;++ i)  {
        printf("%lf\n",A[i].x);
    } */
    for(int i = 0;i <= n;++ i) A[i] = A[i] * B[i];
    fft(A,n,-1);
    for(int i = 0;i <= n;++ i) c[i] = int(A[i].x / n + 0.5);
    for(int i = 0;i <= n;++ i)
        if(c[i] > 10) {
            //printf("%d\n",c[i]);
            c[i + 1] += c[i] / 10,c[i] %= 10;
            if(i + 1 > n) n ++;
        }
    for(int i = n;i >= 0;i --)
        if(!c[i]) n--;else break;
    for(int i = n;i >= 0;i --) printf("%d",c[i]);
    puts("");
    return 0;
} 
												
											luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶)的更多相关文章
- 洛谷.1919.[模板]A*B Problem升级版(FFT)
		
题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...
 - P1919 【模板】A*B Problem升级版 /// FFT模板
		
题目大意: 给定l,输入两个位数为l的数A B 输出两者的乘积 FFT讲解 这个讲解蛮好的 就是讲解里面贴的模板是错误的 struct cpx { double x,y; cpx(double _x= ...
 - 【模板】A*B Problem(FFT快速傅里叶)
		
题目:给出两个n位10进制整数x和y,你需要计算x*y.($n \leq 60000$) 分析: 两个正整数的相乘可以视为两个多项式的相乘, 例如 $15 \times 16 = 240$, 可写成 ...
 - 【洛谷P1919】A*B Problem升级版
		
题目大意:rt 题解:将长度为 N 的大整数看作是一个 N-1 次的多项式,利用 FFT 计算多项式的卷积即可. 代码如下 #include <bits/stdc++.h> using n ...
 - 洛谷P1919 【模板】A*B Problem升级版 题解(FFT的第一次实战)
		
洛谷P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 刚学了FFT,我们来刷一道模板题. 题目描述 给定两个长度为 n 的两个十进制数,求它们的乘积. n<=100000 如 ...
 - 【luogu P3803】【模板】多项式乘法(FFT)
		
[模板]多项式乘法(FFT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求这两个多项式乘起来得到的多项式.(卷积) 思路 系数表示法 就是我们一般来表示一个多项式的方法: \(A ...
 - luoguP1919 A*B Problem升级版 ntt
		
luoguP1919 A*B Problem升级版 链接 luogu 思路 ntt模板题 代码 #include <bits/stdc++.h> #define ll long long ...
 - hdu 1402 A * B Problem Plus FFT
		
/* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才 ...
 - FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
		
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
 - [luogu P3384] [模板]树链剖分
		
[luogu P3384] [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点 ...
 
随机推荐
- [BZOJ1911][BZOJ1912][BZOJ1913]APIO2010解题报告
			
特别行动队 Description 这个好像斜率优化不是一般地明显了啊...只不过要分a的正负两种情况考虑是维护上凸还是下凸 /********************************** ...
 - Docker 配置国内镜像拉取中心,Configure docker to use faster registries in China.
			
Networking in China is really bad when it comes to using some cloud based tools like docker, it's us ...
 - 2017ACM暑期多校联合训练 - Team 6 1011     HDU   6106    Classes  (容斥公式)
			
题目链接 Problem Description The school set up three elective courses, assuming that these courses are A ...
 - NYOJ   1012    RMQ with Shifts     (线段树)
			
题目链接 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each q ...
 - 一款已上市MMO手游地图同步方案总结
			
1. 客户端地图格子的相关知识 在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系: a) 3D坐标系:所有需要3D渲染的角色和光效,都 ...
 - 好消息! 不用再羡慕Python有jupyter 我R也有Notebook了【附演示视频】
			
熟悉python的朋友可能知道jupyter notebook.它是一个Web应用程序,允许你创建和共享代码,方程,可视化和说明性文本文档.现在,我们可以在RStudio中实现R Notebook的功 ...
 - python基础===用9种方式生成新的对象
			
class Point: def __init__(self, x, y): self.x = x self.y = y point1 = Point(1, 2) point2 = eval(&quo ...
 - KVC, KVO 实现原理
			
Key-Value Coding: 键值编码 (KVC) 方法调用: // 对象属性 // 类似: Person -> name setValue: forKey: // 对象的属性或者 属性的 ...
 - 2017百度春招<不等式排列>
			
题目: 度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊 ...
 - 安全控制 iptables
			
转自:http://www.opsers.org/linux-home/videos/chapter-netfilter-iptables-raiders.html 内容简介防火墙的概述iptable ...