博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SDOI2015]序列统计
阅读量:6150 次
发布时间:2019-06-21

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

FFT优化背包

可以推出dp式子

乘法不可做。M是质数,变成原根

dp式子现在是加法

其实每次是原来的f数组,对可以转移的s集合进行卷积(即FFT优化背包)

直接快速幂搞定

 

详细一些:

循环卷积无非就是多了一个取值的位置,每次FFT之后,一个位置再变成两个位置的和,剩下>=m的位置再变成0

也有结合律

 

注意,S中有0,而0没有原根,并且x>=1所以选择0一定不是答案。直接pass掉

代码:

// luogu-judger-enable-o2#include
#define reg register int#define il inline#define numb (ch^'0')#define int long longusing namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=8005*8;const int mod=1004535809;int n,m,o;int len;int G;int s[N],sz;ll ret[N];ll qm(ll x,ll y,int mo){ ll ret=1; while(y){ if(y&1) ret=ret*x%mo; x=x*x%mo; y>>=1; } return ret;}ll f[N],h[N];int id[N];int rev[N];void fft(ll *f,int n,int c){ for(reg i=0;i
>=1; }}int main(){ rd(n);rd(m);rd(o);rd(sz); int cnt=0; int lp; for(reg i=1;i<=sz;++i){ rd(lp);if(lp) s[++cnt]=lp; } findG();// cout<<" GG "<
<
>1]>>1|((i&1)?len>>1:0); }// cout<<" len "<
<

 

转载于:https://www.cnblogs.com/Miracevin/p/10283605.html

你可能感兴趣的文章
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>
MySQL数据类型--与MySQL零距离接触2-11MySQL自动编号
查看>>
生日小助手源码运行的步骤
查看>>
Configuration python CGI in XAMPP in win-7
查看>>
bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
查看>>
CF 888E Maximum Subsequence——折半搜索
查看>>
欧几里德算法(辗转相除法)
查看>>
面试题1-----SVM和LR的异同
查看>>
MFC控件的SubclassDlgItem
查看>>
如何避免历史回退到登录页面
查看>>
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>