【bitset 技巧 分块】bzoj5087: polycomp

神仙zq发现了${n^2\sqrt n}\over 32$做法

Description

你有三个系数为0,1的多项式f(x),g(x),h(x)
求f(g(x)) mod h(x)
为方便起见,将答案多项式所有系数对2取模输出即可
如果f(x)=Sigma(Ak * Xk)
则f(g(x))=Sigma(Ak(g(x))K

Input

一共三行,每行一个多项式,分别为f,g,h
对于一个多项式描述为n P0,P1...Pn其中Pi为0或1
多项式P(x)=P0+P1*x+....+Pn*xn
记n表示多项式最高项的次数,n<=4000

Output

用同样的格式输出答案多项式
如果答案为0,输出0 0

题目分析

陈老师神题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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day 012 生成器 与 列表推导式

生成器的本质就是迭代器&#xff0c;写法和迭代器不一样&#xff0c;用法一样。 获取方法&#xff1a; 1、通过生成器函数 2、通过各种推导式来实现生成器 3、通过数据的转换也可以获取生成器 例如&#xff1a; 更改return 为 yield 即成为生成器 该函数就成为了一个生成器函数…

数据库设计注意事项和原则

引言数据库设计是信息系统设计的基础&#xff0c;一个好的数据库设计在满足了软件需求之外&#xff0c;还要易维护、易扩充等等要求。当然&#xff0c;对专家们反复强调的数据的一致性、冗余性、访问效率等问题的解决&#xff0c;很大程度上取决于数据库设计者的经验和专业水平…

【AtCoder】ARC078

C - Splitting Pile 枚举从哪里开始分的即可 #include <bits/stdc.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar( ) #define enter putchar(\n) #define MAXN 200005 #defi…

20172325 2018-2019-1 《Java程序设计》第二周学习总结

20172325 2018-2019-1 《Java程序设计》第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集、组织了其他对象的对象。集合可以分为两大类&#xff1a;线性集合和非线性集合。线性集合&#xff1a;一种其元素按照直线方式组织的集合。非线性集合&#xff1a;一种其元素按某…

数据库视图

测试表:user有id&#xff0c;name&#xff0c;age&#xff0c;sex字段 测试表:goods有id&#xff0c;name&#xff0c;price字段 测试表:ug有id&#xff0c;userid&#xff0c;goodsid字段 视图的作用实在是太强大了&#xff0c;以下是我体验过的好处&#xff1a; 作用一&…

题解 luogu P2568 GCD

题解 luogu P2568 GCD 时间&#xff1a;2019.3.11 欧拉函数前缀和 题目描述 给定整数\(N\)&#xff0c;求\(1\le x,y \le N\)且\(\gcd(x,y)\)为素数的数对\((x,y)\)有多少对. 分析 枚举素数\(p\), 先求出\(1\le x,y \le \left \lfloor \dfrac n p \right \rfloor\)且\(\gcd(x, …

解决前后台发送请求或者接口之间发送请求乱码的问题

前后台传中文乱码&#xff1a; 前台使用encodeURI 进行编码 后台使用decode进行解码 如果接口之间调用出现乱码.接收方是&#xff1f;&#xff1f;&#xff1f;&#xff1f;这种。传送方式明文的处理方式&#xff1a; 发送方使用decode 进行编码&#xff1a; 接收方使用的ecod…

MSDN帮助文档 无法显示该网页 的问题解决方案(转)

MSDN帮助文档 "无法显示该网页" 的问题解决方案 以前就遇到过这样的问题&#xff0c;还以为是IE7导致的。后来重新安装了IE7也没有解决。后来就重新安装MSDN了&#xff0c;非常郁闷。今天终于知道原因了。因为开了HijackThis删除了一些注册协议&#xff0c;然后发现M…

.net Core发布至IIS完全手册带各种踩坑

服务器环境配置 和各位大爷报告一下我的服务器环境 : Windows Server 2012 iis 8 小插曲开始: 运维大哥在昨天给了我一台新的server 0环境开始搭建 。 并且没有安装任何的系统补丁。 第一件事情请开始打 补丁 打完补丁之后有时补丁会不完全 ,所以需要去官网获取补丁: KB2919355…

Unity --- MeshRenderer之网格合并

创建如图所示的对象结构,parent为空对象&#xff0c;然后将下面的代码挂载到parent对象上运行即可。 1 using UnityEngine;2 using System.Collections;3 4 public class CombineMeshAndMaterials : MonoBehaviour5 {6 void Start()7 {8 CombineMesh();9 }…

css 盒模型的属性

1、盒模型 2、display 3、浮动转载于:https://www.cnblogs.com/Tang854416/p/9676424.html

前后端分离

、前后端分离的好处 &#xff08;1&#xff09;彻底解放前端 &#xff08;2&#xff09;提高工作效率&#xff0c;分工更加明确。 &#xff08;3&#xff09;局部性能提升 &#xff08;4&#xff09;降低维护成本 2、前后端分离的概念 后台只需要提供API接口&#xff0c;…

Win10还原被Windows Defender隔离的文件

Win10最新版本的Windows Defender隔离/删除的文件没有还原的选项&#xff0c;导致很多破解文件或是注册机直接隔离&#xff0c;到威胁历史记录中去却无法恢复。经过各个尝试&#xff0c;到微软官方论坛中也尝试了很多方法&#xff0c;后来发现竟然恢复啦。各位小伙伴可以试试这…

AtCoder Grand Contest 013 题解

A - Sorted Arrays 贪心&#xff0c;看看不下降和不上升最长能到哪&#xff0c;直接转移过去即可。 1 //waz2 #include <bits/stdc.h>3 4 using namespace std;5 6 #define mp make_pair7 #define pb push_back8 #define fi first9 #define se second 10 #define ALL(x…

servlet架构解析

https://www.jianshu.com/p/d433b5fb87e2

(Review cs231n) Backpropagation and Neural Network

损失由两部分组成&#xff1a; 数据损失正则化损失&#xff08;data loss regularization&#xff09; 想得到损失函数关于权值矩阵W的梯度表达式&#xff0c;然后进性优化操作&#xff08;损失相当于海拔&#xff0c;你在山上的位置相当于W&#xff0c;你进行移动&#xff0c…

springboot restful

https://www.jianshu.com/p/733d788ea94d

【计算机算法设计与分析】——排序

一.排序 二.插入排序 &#xff08;1&#xff09;算法描述 &#xff08;2&#xff09;性能分析 &#xff08;3&#xff09;寻求优化 三.归并排序 &#xff08;1&#xff09;算法思想 &#xff08;2&#xff09;性能分析 &#xff08;2&#xff09;示例 &#xff08;3&#xff09…

QT 随机数生成

下面总结了QT中随机生成的方法&#xff08;仅供学习参考&#xff09;&#xff0c;分为旧方法和新方法&#xff0c;一般来说&#xff0c;旧的方法已经被抛弃&#xff0c;在开发新的应用中推荐使用新方法。 C Code 123456789101112131415161718192021222324#include <QCoreApp…

获取/设置IFRAME内对象元素的几种JS方法

获取/设置IFRAME内对象元素的几种JS方法 iframe浏览器ie文档微软&#xff11;。IE专用(通过frames索引形象定位)&#xff1a; document.frames[i].document.getElementById(元素的ID); &#xff12;。IE专用(通过IFRAME名称形象定位)&#xff1a; document.frames[iframe的name…