【bitset 技巧 分块】bzoj5087: polycomp
神仙zq发现了${n^2\sqrt n}\over 32$做法
Description
Input
Output
题目分析
陈老师神题x1
观察到这里多项式的所有操作都是在系数$\mod 2$的意义下的,因此可以用bitset来加速多项式的一些操作。例如$O(n^2)$实现多项式取模。
1 void mod(poly &a, int pos) 2 { 3 for (int i=pos; i>=p; i--) 4 if (a[i]) a ^= c<<(i-p), a[i] = 0; //我第一次居然把标红地方给忘了 5 }
但是如同很多bitset的技巧题一样,非常重要的一点是bitset每次整体操作的复杂度是 $O(size)$ 的。
这意味着$Poly\, +:O(n), \, Poly\, *:O(n^2)$
接下去我们从暴力开始谈起。
暴力做法 $O({{n^3}\over 32})$
第一个需要解决的问题是:$f(g(x))$。那么我们只需要对$g(x)$求$k$次幂(也即最暴力地k次自乘),再将这些结果相加得到多项式$f(g(x))$。至于取模的过程,则可以在每次multiply的时候顺带模干净,这样最终相加得到的结果就是在模多项式意义下的答案。
1 void mod(poly &a, int pos) //pos是a的度数 2 { 3 for (int i=pos; i>=p; i--) 4 if (a[i]) a ^= c<<(i-p), a[i] = 0; 5 } 6 void mult(poly a, poly b, poly &ret) //ret=a*b 7 { 8 ret.reset(); 9 for (int i=0; i<=p; i++) 10 if (a[i]) ret ^= b<<i; //这里就是模拟n^2多项式乘法的过程 11 mod(ret, p<<1); 12 }
总的代码:
1 #include<bits/stdc++.h> 2 const int maxn = 8035; 3 typedef std::bitset<maxn> poly; 4 5 int n,m,p; 6 poly a,b,c,tmp,cnt; 7 8 void input(poly &a, int &n) 9 { 10 scanf("%d",&n); 11 for (int i=0, x; i<=n; i++) 12 { 13 scanf("%d",&x); 14 if (x) a.set(i); 15 } 16 } 17 void mod(poly &a, int pos) 18 { 19 for (int i=pos; i>=p; i--) 20 if (a[i]) a ^= c<<(i-p), a[i] = 0; 21 } 22 void mult(poly a, poly b, poly &ret) 23 { 24 ret.reset(); 25 for (int i=0; i<=p; i++) 26 if (a[i]) ret ^= b<<i; 27 mod(ret, p<<1); 28 } 29 int main() 30 { 31 input(a, n), input(b, m), input(c, p); 32 tmp[0] = 1, mod(b, m); 33 for (int i=0; i<=n; i++) 34 { 35 if (a[i]) cnt ^= tmp; 36 mult(tmp, b, tmp); //复杂度n^3在这里 37 } 38 while (p>=0&&!cnt[p]) --p; 39 if (p==-1) puts("0 0"); 40 else{ 41 printf("%d",p); 42 for (int i=0; i<=p; i++) 43 printf(" %d",cnt[i]?1:0); 44 } 45 return 0; 46 }
对系数按10位分块 $O({{n^3}\over 320})$
参见法老博客:[BITSET 分块] BZOJ5087. polycomp
注:md[t]并不一定要等于0.这里的取模多项式最高位对计算无影响。
容易发现这种做法的复杂度的阶仍然是$n^3$.
对$i=a\sqrt k+b$分块 $O({{n^2\sqrt n}\over 32})$
233
转载于:https://www.cnblogs.com/antiquality/p/10507033.html
【bitset 技巧 分块】bzoj5087: polycomp相关推荐
- [BZOJ4763][P3603]雪辉[手写bitset+静态分块]
题意:给一个n个点的树,点有点权,有m次询问,每次询问多条链的并有多少种不同的点权以及它的mex mex就是一个集合中最小的没有出现的非负整数,注意0要算 rand出 \(\sqrt n\)个点,把每 ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores
#1236 : Scores 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 Kyle is a student of Programming Monkey Element ...
- # 知识点学习——模拟退火算法
模拟退火算法 打算补一下上一把牛客比赛的K题Solar Energy,需要模拟退火知识点的储备.打算速通以后出出看K题. 参考资料 感谢在网上分享学习心得的各位同学. 模拟退火学习笔记1 模拟退火学习 ...
- CTSAPIO2019爆零记
如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...
- 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...
- LOJ bitset+分块 大内存毒瘤题
题面 $ solution: $ 真的没有想到可以用分块. 但是可以发现一个性质,每个询问只关心这个点最后一次赋值操作,和这个赋值操作后的所有取 $ min $ 操作.这个感觉很有用,但是真的很难让人 ...
- 洛谷-P1903 数颜色 分块 bitset
题目 题目链接 题意 给你一个数列代表不同的颜色(可以修改). 询问一段区间内有多少种颜色. 题解 很容易想到的就是线段树来维护bitset. 这里为了练习,使用分块维护bitset. * 事实上线段 ...
- 两幅二值图像叠加_【显微视界】光照不均匀图像分割技巧1——分块阈值
今日光电 有人说,20世纪是电的世纪,21世纪是光的世纪:知光解电,再小的个体都可以被赋能.欢迎来到今日光电! ----与智者为伍 为创新赋能---- 前言 在数字图像处理中,图像分 ...
- 矩阵初等变换的“打洞技巧”与“分块矩阵的行列式公式”
矩阵打洞(初等变换矩阵)是线性代数的基本功. 打洞技巧是矩阵一行减另一行的若干倍,或一列减另 一列的若干倍这两类初等变换的推广 利用分块矩阵的乘法将矩阵的某个块变为零 ( A B C D ) = ( ...
最新文章
- 【spring】spel表达式
- 无法修改服务器名称_经典怀旧服服务器第六期免费角色转移服务10月18日7:00开放...
- mysql搜索规则_MySQL基于规则优化
- 【Flutter】Flutter 资源文件使用 ( 导入资源图片 | 使用图片资源 )
- int *ptr=(int *)(a+1)问题的探讨
- Python单元测试之unittest
- 列表输出循环左移_互联网人工智能开发语言Python之for循环、break、continue详解...
- s5-11 距离矢量路由选择协议
- android studio tree,Git 、Sourse Tree 和 Android Studio配置遇到的问题
- [PAT乙级]1043 输出PATest
- android 画圆教程,android shap画圆(空心圆、实心圆)
- 【数学建模】基于matlab无线可充电传感器网络充电路线规划【含Matlab源码 750期】
- 世界线(bzoj2894)(广义后缀自动机)
- unity android光照贴图格式,Unity3D-光照贴图技术
- 解决win10系统不能打开.chm类型的文件
- Hadoop——MapReduce相关eclipse配置及Api调用(图文超详细版)(内含遇到错误的解决方法)
- js区分单击双击,双击不会触发单击事件
- 基于Redis解决业务场景中延迟队列的应用实践
- 【万字拆解】ChatGPT各项能力的起源
- matlab画图中颜色渐变
热门文章
- [Docker] Centos7 安装docker-18.03.1-ce(离线安装)
- 如何成为一名合格的自动驾驶工程师
- 一种新的8B/10B编解码硬件设计方法
- 【Attention】Visual Attention Network
- 谷歌云请更正这张卡片的信息_如何识别和更正Google Analytics(分析)报告中的(未设置)值
- 推荐“公主妄想症系列之二:第一次”
- 希望我不会“伤心至死”
- dba的前景_运维、测试、程序员,这些技术岗位哪个更有前景?
- 微信电脑客户端登陆_电脑端的微信只能开一个?简单操作就能随意开
- 【caffe-Windows】mnist实例编译之model的生成