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结点 ... 
随机推荐
- Razor使用Parse()时最好指定“缓存名”
			为什么? 本文的标题,明显有一种提醒的口吻. 从18年的生活经验看,如果想提醒人要怎么办,不要怎么办. 最好说明原因.那么小编开始说明原因喽. 哦对,说原因之前,先说交代一下背景,一句话 在非mvc下 ... 
- AngularJS 指令绑定 & 简介
			指令中独立scope 的 & 官方说明: 1. 绑定表达式 2. 经常用来绑定回调函数 诡异的地方在于,这个 & 某次听人说在子组件中是不能传值给callback的,好奇查了一下官方文 ... 
- layui利用jQuery设置下拉列表的值
			今天在利用jQuery动态设置下拉列表的值的时候确怎么也赋值不上去,其中用到了layui框架,源代码如下: $.post(contextPath+'/courseLibrary/getCourseBa ... 
- 关于SQLite3 编译及交叉编译的一些问题
			from : http://blog.sina.com.cn/s/blog_5f2e119b0101ibwn.html SQLite3 (http://www.sqlite.org)是一个非常强大的小 ... 
- python  ORM - sqlalchemy 操作使用
			python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ... 
- 使用ExtJS做一个用户的增删改查
			extjs版本为4.2,用户数据放在静态list中存储 User.java package com.ext.demo.dao; public class User { private int id; ... 
- Linux创建ftp并设置权限以及忘记ftp帐号(密码)修改
			忘记ftp密码修改方法: 1.登录服务器 cd /etc/vsftpdcat ftpusers找到对应的ftp用户名 (如果用户名也忘记了 那么 cd /etc 然后cat passwd 查看用户和 ... 
- Java显式锁学习总结之四:ReentrantLock源码分析
			概述 ReentrantLock,即重入锁,是一个和synchronized关键字等价的,支持线程重入的互斥锁.只是在synchronized已有功能基础上添加了一些扩展功能. 除了支持可中断获取锁. ... 
- beego学习笔记(4):开发文档阅读(6)
			beego的响应流程: 1.监听的端口接收数据,默认是8080端口. 2.用户请求到达8080端口后,开始数据处理流程. 3.初始化CONTEXT对象.判断是否是WEBSOCKET请求,如果是,设置I ... 
- 通过EPROCESS获取进程名
			上一篇写自我保护时用到了,主要是不同版本的位置不同.找了一下,发现XP和win7的情况分别如下. WIN7 lkd> dt nt!_EPROCESS +0x000 Pcb : _KPROCESS ... 
