【bitset 技巧 分块】bzoj5087: polycomp
神仙zq发现了${n^2\sqrt n}\over 32$做法
Description
Input
Output
题目分析
陈老师神题x1
观察到这里多项式的所有操作都是在系数$\mod 2$的意义下的,因此可以用bitset来加速多项式的一些操作。例如$O(n^2)$实现多项式取模。
void mod(poly &a, int pos)
{
for (int i=pos; i>=p; i--)
if (a[i]) a ^= c<<(i-p), a[i] = 0; //我第一次居然把标红地方给忘了
}
但是如同很多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的时候顺带模干净,这样最终相加得到的结果就是在模多项式意义下的答案。
void mod(poly &a, int pos) //pos是a的度数
{
for (int i=pos; i>=p; i--)
if (a[i]) a ^= c<<(i-p), a[i] = ;
}
void mult(poly a, poly b, poly &ret) //ret=a*b
{
ret.reset();
for (int i=; i<=p; i++)
if (a[i]) ret ^= b<<i; //这里就是模拟n^2多项式乘法的过程
mod(ret, p<<);
}
总的代码:
#include<bits/stdc++.h>
const int maxn = ;
typedef std::bitset<maxn> poly; int n,m,p;
poly a,b,c,tmp,cnt; void input(poly &a, int &n)
{
scanf("%d",&n);
for (int i=, x; i<=n; i++)
{
scanf("%d",&x);
if (x) a.set(i);
}
}
void mod(poly &a, int pos)
{
for (int i=pos; i>=p; i--)
if (a[i]) a ^= c<<(i-p), a[i] = ;
}
void mult(poly a, poly b, poly &ret)
{
ret.reset();
for (int i=; i<=p; i++)
if (a[i]) ret ^= b<<i;
mod(ret, p<<);
}
int main()
{
input(a, n), input(b, m), input(c, p);
tmp[] = , mod(b, m);
for (int i=; i<=n; i++)
{
if (a[i]) cnt ^= tmp;
mult(tmp, b, tmp); //复杂度n^3在这里
}
while (p>=&&!cnt[p]) --p;
if (p==-) puts("0 0");
else{
printf("%d",p);
for (int i=; i<=p; i++)
printf(" %d",cnt[i]?:);
}
return ;
}
对系数按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
【bitset 技巧 分块】bzoj5087: polycomp的更多相关文章
- Codeforces-914F Substrings in a String (Bitset求T串中S串出现次数)
之前有过区域赛,简化版问题: 给定一个小写字符组成的字符串S,(|S|<1e5,下标从1开始),现在有Q种操作,对于每个操作Q(Q<=1e5),输入opt, 如果opt==1,输入x,c, ...
- bzoj3758. 数数
题解: 一波优秀的打表技巧 分块打表,分成1000组,打表打出来 另外10^6暴力算
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores
#1236 : Scores 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 Kyle is a student of Programming Monkey Element ...
- CTS&&APIO2019爆零记
如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...
- 个人训练记录(UPD 9.16)
本文章记录一些较难的题,摘自自己的blog中的其他文章.也有些单独成章有点浪费的题也写在里面了. 2019.7.15-2019.7.21 1182F(2900) 题意:求在区间 \([a,b]\) 中 ...
- ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879
ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879 A 签到,dfs 或者 floyd 都行. #i ...
- Sobol 序列并行化的实践经验
目录 Sobol 序列并行化的实践经验 随机数发生器并行化的常见策略 Sobol 序列的原理和跳转功能 Sobol 序列并行化实践 分块策略 蛙跳策略 蛙跳策略的计算量分析 减少异或计算的技巧 分块策 ...
- 【分块】【bitset】hdu6085 Rikka with Candies
给你数组A和B,A B中的元素大小都不超过5w,且两两不同. q次询问,每次给你个k,问你有多少对(i,j),满足A(i)%B(j)==k. 如题目所言模拟bitset的过程,实质上是个分块,每块的大 ...
- 种树 by yoyoball [树分块+bitset]
题面 给定一棵树,有点权 每次询问给出一些点对,求这些点对之间的路径的并集上不同权值的个数,以及这些权值的$mex$ 思路 先考虑只有一对点对,只询问不同权值个数的问题:树上莫队模板题 然后加个$me ...
随机推荐
- Centos7中给gitLab汉化
第一步:安装git 下载补西,东西在清华大学开源中心 yum install –y git 第二步:下载 git clone https://gitlab.com/xhang/gitlab.git 第 ...
- NetCore + Mysql + EF:No coercion operator is defined between types 'System.Int16' and 'System.Boolean',
总结三种解决办法: 1.Mysql升级到7 2.Nuget安装Pomelo.EntityFrameworkCore.MySql 2.2.0替代MySql.Data.EntityFrameworkCor ...
- 关于java后台接入百度地图返回参数为{"status":211,"message":"APP SN校验失败"}的解决方法
1.关于百度地图,天气预报,微信公众平台等一系列权威机构java接入的认识: a.首先要认识到的是这些信息都属于外部接口,我们在进行接入的时候一定要注意到这些接口的参数设置,稍微一不留神就会出现接入失 ...
- NET Core 2.1 Preview 1
NET Core 2.1 Preview 1 [翻译] .NET Core 2.1 Preview 1 发布 原文: Announcing .NET Core 2.1 Preview 1 今天,我们宣 ...
- 将JWT与Spring Security OAuth结合使用
1.概述 在本教程中,我们将讨论如何使用Spring Security OAuth2实现来使用JSON Web令牌. 我们还将继续构建此OAuth系列的上一篇文章. 2. Maven配置 首先,我们需 ...
- XML文件的一些操作
XML 是被设计用来传输和存储数据的, XML 必须含有且仅有一个 根节点元素(没有根节点会报错) 源码下载 http://pan.baidu.com/s/1ge2lpM7 好了,我们 先看一个 XM ...
- Ubuntu 修改host并重启网络
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- 干货|java缓存技术详解
一.缓存是什么? 请点击此处输入图片描述 Cache ①高速缓冲存储器,其中复制了频繁使用的数据以利于快速访问. ②位于速度相差较大的两种硬件/软件之间,用于协调两者数据传输速度差异的结构 二.缓存有 ...
- SequenceFile和MapFile
HDFS和MR主要针对大数据文件来设计,在小文件处理上效率低.解决方法是选择一个容器,将这些小文件包装起来,将整个文件作为一条记录,可以获取更高效率的储存和处理,避免多次打开关闭流耗费计算资源.hdf ...
- Python中的绝对路径和相对路径
大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解. 在编写的py文件中打开文件的时候经常见到下面其中路径的表达 ...