「NOI2017」整数 解题报告】的更多相关文章

「NOI2017」整数 有一些比较简单的\(\log^2n\)做法 比如暴力在动态开点线段树上维护每个位置为\(0\)还是\(1\),我们发现涉及到某一位加上\(1\)或者减去\(1\)实际上对其他位的影响只有区间覆盖,通过线段树上二分可以得到区间覆盖的位置,然后暴力区间覆盖即可. 反正我这种菜鸡大常数写法只得到了68分.. 考虑利用势能,注意到如果同时改变加法和减法,势能很容易被\(b\)搞掉 如果分开维护加法和减法,把位置上的\(1\)的个数当做势能,可以发现,暴力修改是均摊\(O(n\lo…
「NOI2017」蔬菜 首先考虑流 可以从 \(s\) 流入表示得到蔬菜,流出到 \(t\) 表示卖出蔬菜,给每个蔬菜拆点,并给它它每天应得的蔬菜. 但是我们没办法直接给,注意到如果把变质看成得到并可以留给上一天,我们每天就可以得到变质的蔬菜并获得从后一天没用完的蔬菜,这就是建图的大体思路. 然后你发现这个东西需要对询问天数动态加点,加点后发现需要退流,可以暴力退 \(m\) 的流,复杂度是正确的. 期望得分 \(60\) 分 然后研究一下,发现退流是没有必要的,也就是说第 \(i\) 天选择的…
「NOI2017」游戏 \(d\)这么小,你考虑直接对\(d\)个东西暴力 枚举\(x\)为\(a\)或\(b\)(\(c\)就不用了,因为\(a,b\)已经包含\(c\))了,剩下的就是个\(2-sat\)问题了 但是你发现有个情况是,在若\(A\)即\(B\)时,如果\(B\)被\(ban\)了,那么\(A\)也要被\(ban\) 我们记录一下被\(ban\)的点,然后在球方案的时候判一下(不得不用topo排序了.. 但是其实也可以\(A\)连\(\lnot A\),就可以直接比较SCC编号…
Portal Description 有一个整数\(x=0\),对其进行\(n(n\leq10^6)\)次操作: 给出\(a(|a|\leq10^9),b(b\leq30n)\),将\(x\)加上\(a\cdot 2^b\). 询问\(x\)在二进制下位权为\(2^k(k\leq30n)\)的位的值. 保证任意时刻\(x\geq0\). Solution 用线段树来模拟二进制下的加减运算. 线段树上的每个位置维护\(30\)位二进制数,即第一位维护\(2^0...2^{29}\),第二位维护\(…
「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #include <cstdio> #include <cctype> #include <cstring> #include <queue> #include <vector> #include <algorithm> using std::mi…
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写的. 大值思路是对每个子树维护成一个大节点,存一些根啊,深度啊,到大节点根距离啊,节点编号范围啊之类的信息. 然后发现维护相对节点标号大小是个区间第k大,得对dfs序建一颗主席树 然后每次询问倍增跳一跳,讨论个几种情况之类的. ps:别吐槽名字 Code: #include <cstdio> #i…
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的,但注意它是单调的 于是每个点假装向左边第一个小于它的位置连边,就可以处理出前缀和一样的东西,然后预处理后也是\(O(1)\)的 Code: #include <cstdio> #include <cctype> #include <algorithm> #include…
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这个路径条数等于大于当前答案的所有路径条数,那么这个答案是不行的. 关于链修改单点询问,可以树状数组维护dfs序,然后每次修改链去差分修改 然后把二分答案拿到整体二分上去就可以了 Code: #include <cstdio> #include <cctype> #include <…
「HAOI2018」染色 是个套路题.. 考虑容斥 则恰好为\(k\)个颜色恰好为\(c\)次的贡献为 \[ \binom{m}{k}\sum_{i\ge k}(-1)^{i-k}\binom{m-k}{i-k}\binom{n}{si}\frac{(si)!}{(s!)^i}(m-i)^{n-si} \] 有两项最开始搞忘了..\(\binom{n}{si}\frac{(si)!}{(s!)^i}\)就是这两个 代表钦定\(si\)个位置去染,然后染色本身是个可重排列 设\(d=\min(\l…
「HNOI2016」最小公倍数 考虑暴力,对每个询问,处理出\(\le a,\le b\)的与询问点在一起的联通块,然后判断是否是一个联通块,且联通块\(a,b\)最大值是否满足要求. 然后很显然需要去离线搞一下,考虑定期重构. 具体的,先把边按\(a\)排序,然后每\(S\)分一块. 处理每一块时,把前面所有块的边和权值在这个块内的询问放在一起按\(b\)排序,这个可以用类似归并的思路\(O(n)\)完成. 然后遍历这个排序后的东西,用带权并查集维护联通性. 具体的,如果是边,就在并查集里面加…