博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Loj #6261. 一个人的高三楼
阅读量:4958 次
发布时间:2019-06-12

本文共 1133 字,大约阅读时间需要 3 分钟。

link : https://loj.ac/problem/6261

 

一看就是一个已经退役的大佬出的题。。。

我一开始还是too young了,忘了看时限,,以为NTT+多项式快速幂就能水过的。。。

于是就写了个我代码里被我注释掉的东西。。。。。

后来被卡了之后才想起来全是1的多项式的N次方的各个项的系数是可以直接用组合数算出来的。。。。

具体的说,设 A = {1,x,x^2,,,,,,,} ^ N 。

A中的 x^i 的系数就是 C(N+i-1,i) ,因为这就是可重组合的定义式吧23333。

而根据组合数的通项公式,我们可以很容易的从 x^i 的系数来递推 x^(i+1) 的系数。

O(N)  计算出 A 之后,直接一遍NTT 让 a卷一下它,得到结果。

 

写的时候犯了很多SB错误,想想都想打自己23333.

    1.一开始求补0之后序列长度的逆元求成补0之前的了,,,虽然这个样例并不能看出来因为样例 4=2^2   2333.

    2. 数组大小一定要开到 > 卷积后最高次数 的最小的 2^k 。

   3.K比较大,,,乘积的时候得先%ha之后再运算233

 

#include
#define ll long long#define maxn 400005 using namespace std;const int ha=998244353;const int root=3;const int inv=ha/3+1;ll k;int a[maxn],b[maxn],n,N;int INV,e[maxn],r[maxn],l;int object[2][maxn];int ni[maxn];inline int ksm(int x,int y){ int an=1; for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha; return an;}inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}inline void NTT(int *c,int f){ for(int i=0;i
>1]>>1)|((i&1)<<(l-1)); for(int i=1;i<=l;i++){ object[0][i]=ksm(root,(ha-1)/(1<
>=1; } */ NTT(a,1),NTT(b,1); for(int i=0;i

  

转载于:https://www.cnblogs.com/JYYHH/p/8541390.html

你可能感兴趣的文章
restframework CBV试图的4种方式
查看>>
大图居中,以1920px为例
查看>>
Python3 图片转字符画
查看>>
[C陷阱和缺陷] 第7章 可移植性缺陷
查看>>
人需要治愈
查看>>
linux中configure文件默认执行结果所在位置
查看>>
Spring MVC例子
查看>>
jmeter 断言
查看>>
玩玩小爬虫——抓取时的几个小细节
查看>>
error C4996: 'fopen'
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
综合练习:词频统计
查看>>