干货满满的良心博客

  • 传送至只有小怪的村庄——请开始你的逆天之路
    • A:P1919
    • B:P4157
  • 刷怪升级——转战玄灵大陆
    • C:P6300
    • D:P3763
    • E:P3321
    • F:P5641
    • G:P4986
    • H:P4721——获得知识药剂一瓶——分治FFTFFTFFT
    • I:P3338
    • J:P4173
    • K:P5748
    • L:P3702
    • M:P5667
    • N:P4245——拾得知识药丸一颗——三模数NTTNTTNTT
    • O:P5488
    • P:P4199
    • Q:P4061
  • 缘遇逆天秘籍——金牌打野
    • R:P4841
    • S:[UVA4671]K-neighbor substrings
    • T:SP8372 TSUM - Triple Sums
    • U:[CodeChef - COUNTARI]Arithmetic Progressions
    • V:CodeForces528D Fuzzy Search
    • W:CodeForces 954I Yet Another String Matching Problem

因为对卷积还不是很清楚,所以开始疯狂的刷题之路,会慢慢更新的。
前面没有来源标注的题目题号洛谷上面都有。

FFT,NTTFFT,NTTFFT,NTT是卷积运算中常见的优化→O(nlogn)\rightarrow O(nlogn)→O(nlogn)
因为文字量极大,很有可能会有细节错误,欢迎指出,谢谢o(=·ω·=)m

传送至只有小怪的村庄——请开始你的逆天之路

A:P1919

【模板】A*B Problem升级版(FFT快速傅里叶)

将输入的a,ba,ba,b每一位拆成对应的多项式系数

手玩一下普通乘法的计算法则,发现从左到右对应多项式次数从0,n−10,n-10,n−1依次递增

两数相乘是符合卷积形式,下标是相加的

所以将这个串反转,从左到右从000开始编号

然后套FFTFFTFFT跑出乘积结果,再转回系数表达式

此时某些位置上的值可能很大,这就涉及到进位的问题

从左到右扫一遍即可完成进位

最后倒着输出便是ACACAC

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define maxn 4000100
struct complex {double x, i;complex(){}complex( double X, double I ) {x = X, i = I;}
}A[maxn], B[maxn];double pi = acos( -1.0 );complex operator + ( complex a, complex b ) {return complex( a.x + b.x, a.i + b.i );
}complex operator - ( complex a, complex b ) {return complex( a.x - b.x, a.i - b.i );
}complex operator * ( complex a, complex b ) {return complex( a.x * b.x - a.i * b.i, a.x * b.i + a.i * b.x );
}char a[maxn], b[maxn];
int r[maxn], ans[maxn];
int len;void FFT( complex *v, int opt ) {for( int i = 0;i < len;i ++ )if( i < r[i] ) swap( v[i], v[r[i]] );for( int i = 1;i < len;i <<= 1 ) {complex omega( cos( pi / i ), opt * sin( pi / i ) );for( int j = 0;j < len;j += ( i << 1 ) ) {complex w( 1, 0 );for( int k = 0;k < i;k ++, w = w * omega ) {complex x = v[j + k], y = v[j + k + i] * w;v[j + k] = x + y;v[j + k + i] = x - y;}}}
}int main() {scanf( "%s %s", a, b );int n = strlen( a ), m = strlen( b );for( int i = 0;i < n;i ++ ) A[n - i - 1] = complex( a[i] - '0', 0 );for( int i = 0;i < m;i ++ ) B[m - i - 1] = complex( b[i] - '0', 0 );len = 1; int l = 0;while( len < ( n + m ) ) len <<= 1, l ++;for( int i = 0;i < len;i ++ )r[i] = ( r[i >> 1] >> 1 ) | ( ( i & 1 ) << ( l - 1 ) );FFT( A, 1 );FFT( B, 1 );for( int i = 0;i < len;i ++ )A[i] = A[i] * B[i];  FFT( A, -1 );for( int i = 0;i < len;i ++ )ans[i] = ( A[i].x / len + 0.5 );for( int i = 0;i < len;i ++ )if( ans[i] > 9 ) ans[i + 1] += ans[i] / 10, ans[i] %= 10;while( ! ans[len - 1] ) len --;for( int i = len - 1;~ i;i -- )printf( "%d", ans[i] );return 0;
}

B:P4157

[SCOI2006]整数划分

这道题显然大整数是可做的

但是都学到现在了,一般我是不怎么打大整数的,而且现在可能也打不出来

有个结论,尽可能得分333,最后若是4/24/24/2,就不分了

这个结论不需要证吧,考场上肯定是找规律找出来的

可以套在FFTFFTFFT上,不就是多项式只有个常数项罢了,照样可以算

xxx个333求乘积,就对FFTFFTFFT进行快速幂,处理进位问题即可


刷怪升级——转战玄灵大陆

C:P6300

悔改

第一次见到这种应用,记在小本本上!! ✍

想了一会儿,列了个n3n^3n3的dpdpdp转移,只能搞555分,✧*。٩()و✧。 果断放弃

然后,木头拼接起来长度相加,突然想到了生成函数

发现可以用长度为iii的木头数量作为xix^ixi的系数,两端拼在一起就是生成函数的二次幂

火速开敲,马上测样例,(⊙_⊙;)?393\ 93 9怎么肥事!!

仔细想了一下,ε=(・д・`*)ハァ…两个长度为111的木头和一个长度为888的木头拼接了,算成了两根新木头,但是按题目来说必须有一个长度111木头不用

<。)#)))≦我陷入了沉思……

FFT/NTT卷积神级副本相关推荐

  1. 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. CUDA并行算法系列之FFT快速卷积

    CUDA并行算法系列之FFT快速卷积 卷积定义 在维基百科上,卷积定义为: 离散卷积定义为: [ 0, 1, 2, 3]和[0, 1, 2]的卷积例子如下图所示: Python实现(直接卷积) 根据离 ...

  3. 深度学习-11:神经元、神经网络、人脑和卷积神网络

    深度学习-11:神经元.神经网络.人脑和卷积神网络 深度学习原理与实践(开源图书)-总目录 在生物神经网络中,学习源自于大脑中无数神经元之间的连接.大脑接触到新的刺激后,这些神经元之间的连接改变了配置 ...

  4. 对目标追踪MOSSE算法中FFT与卷积操作的理解

    目标追踪 目标追踪是现在机器视觉下面一个研究方向,主要是研究如何对视频中的一个物体进行追踪.可以用在军事领域无人机对地面目标进行自动瞄准和打击,或者是刑侦领域在大量的监控摄像数据中筛选出某个警方感兴趣 ...

  5. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

  6. 【UOJ574】多线程计算【二元二项式反演】【定积分】【矩阵】【NTT 卷积】

    题意:有 n×mn\times mn×m 的网格,每个结点在 [0,1)[0,1)[0,1) 内的一个随机时刻被点亮.有 hhh 个数对 xi,yix_i,y_ixi​,yi​,对于一个瞬间状态,如果 ...

  7. 【BZOJ3451】Normal【期望线性性】【点分治】【NTT卷积】

    题意:随机分治中心点分治的期望操作次数 n≤3×104n\leq 3\times 10^4n≤3×104 即求点分树的 siz 之和的期望 即祖孙关系对数期望 考虑一有序点对 (u,v)(u,v)(u ...

  8. 【洛谷P4705】玩游戏【二项式定理】【NTT卷积】【生成函数】【分治NTT】【函数求导】【多项式对数】

    传送门 题意:给定长度为N,MN,MN,M的序列a,ba,ba,b和ttt,随机选取x∈[1,N],y∈[1,M]x \in[1,N],y\in[1,M]x∈[1,N],y∈[1,M],对于i=1,2 ...

  9. 【LOJ166】拉格朗日插值2【拉格朗日插值】【NTT卷积】

    传送门 题意:给定n,m,f(0),f(1),......,f(n)n,m,f(0),f(1),... ...,f(n)n,m,f(0),f(1),......,f(n),求f(m),f(m+1),. ...

最新文章

  1. centos 6.4 SVN服务器多个项目的权限分组管理
  2. webpack笔记(6)调试模式
  3. jsp调用controller方法_SpringMVC五大核心组件及调用过程
  4. 47 -算法 -回文串 -Leetcode 125 - 验证回文串
  5. Iptables 指南
  6. linux下的文件比对工具,Linux - 文件比对工具
  7. Unity实现2D小游戏
  8. ct扫描方式有哪些_日联科技x-ray:工业CT是怎么进行X射线的断层扫描的
  9. Python自学教程3-英语不好,变量怎么命名
  10. 计算机帮教助教活动总结,家长助教活动总结范文(精选5篇)
  11. 使用C语言绘制变换前与变换后的三角形图形——变换矩阵
  12. throw Exception
  13. mate40怎么用鸿蒙系统,怎么使用鸿蒙系统?
  14. 强连通分量SCC(Tarjan)
  15. java北京招聘_JAVA应届毕业生去北京找工作,薪资大约多少?
  16. 单系统 台电x80pro_转载:台电X80 Pro Plus 刷Windows10单系统
  17. 党政机关安全综合协同办公业务系统
  18. vue 打包后,后缀名为.woff等字体问题不能用解决办法
  19. 卧槽!微信图标现在可以换颜色了?
  20. 基于图神经网络的异构图表示学习和推荐算法研究(完整代码+数据)

热门文章

  1. 3月份GitHub上最热门的开源项目
  2. laya 怎么生成签名_PHP开发API接口签名生成及验证
  3. java 反射 本类,关于Java反射中基本类型的class有关问题
  4. winform 统计大量数据重复的元素个数_面试系列:十个海量数据处理方法大总结...
  5. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了
  6. 算法题目——Problem A 二进制(北邮机试)
  7. fillrect不填充被覆盖的区域 mfc_quot;条带覆盖quot;猜想的中二证明:quot;球面条线覆盖或点覆盖quot;积分π...
  8. 69. Sqrt(x)010(二分法求解+详解注释)
  9. 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之下——设计键
  10. 『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式