- 博客(570)
- 资源 (3)
- 收藏
- 关注
原创 Codechef:Counting The Important Pairs/TAPAIR
传送门题解:一定割一条树边,然后分类讨论即可。注意两条被环覆盖的树边同时被删除合法当且仅当覆盖他们的环边集合相同,这个可以hash。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { stati...
2018-10-12 16:29:20 194
原创 Codechef:Counting D-sets/CNTDSETS(容斥)
传送门题解:平移的限制相当于强制每一维存在坐标0。距离为D的限制相当于存在一维的最大值为D。考虑计算最大值小等D的方案数减去小等于D-1的方案数,限制只有每一维都存在0,这个用组合数来容斥一下就行了,时间复杂度O(Tnlogn)O(T n \log n)O(Tnlogn)。#include <bits/stdc++.h>using namespace std;cons...
2018-10-12 15:28:08 309
原创 Codechef:Count on a Treap(线段树)
传送门题解:Treap的中序遍历是按照键值来排序后的序列,两点的lca为这个序列上区间权值的最小值。现在只用考虑怎么求深度:显然往前的一个权值比他大的会成为他的父亲,或者他们中间夹了一个更大的成为他的父亲。 其实就是求上升序列,然后套用常见套路即可。#include <bits/stdc++.h>using namespace std;typedef pair <i...
2018-10-12 11:19:45 331
原创 Codechef:The Street/STREETTA
传送门题解:第一个操作用李超树维护一下就行了。 时间复杂度O(mlog2n)O(m \log^2 n)O(mlog2n)。#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long LL;const int RLEN=1&lt;&lt;18|1;inline char nc() { static cha...
2018-10-12 09:52:48 227
原创 Codechef:Sereja and Subsegment Increasings/SEINC
传送门题解:处理出一个ci=(bi−ai)&VeryThinSpace;mod&VeryThinSpace;4c_i = (b_i - a_i) \bmod 4ci=(bi−ai)mod4,然后差分一下ccc,贪心即可。#include <bits/stdc++.h>using namespace std;typedef pair <int,int...
2018-10-12 07:46:25 184
原创 Codechef:Sereja and Arcs/SEAARC
传送门题解:这种题显然对出现次数分类讨论一下。出现少的O(S2)O(S^2)O(S2)做,出现多的O(n)O(n)O(n)做,最后可以做到O(nnlogn)O(n \sqrt{n \log n})O(nnlogn)的复杂度。#include &lt;bits/stdc++.h&gt;using namespace std;typedef pair &lt;int,int&gt; p...
2018-10-11 21:36:00 289
原创 Codechef:Two Companies/TWOCOMP
传送门题解:想了半天看了一眼数据范围。。 直接最大独立集。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &...
2018-10-11 16:25:54 187
原创 Codechef:Game of Numbers/GNUM (网络流)
传送门题解:每个质数新建点跑最大匹配即可。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) && (ob=(ib=ibuf)+fread(...
2018-10-11 15:18:25 558
原创 Codechef :Push the Flow!/PUSHFLOW (树链剖分)
传送门题解:不错的树链剖分练习题。又是毒瘤仙人掌,先把环缩起来,然后链剖维护重链上相邻的环的最小值。对于轻边特殊处理,此时要对每个环再维护一个线段树。时间复杂度O(nlog2n)O(n \log^2 n)O(nlog2n)。#include &lt;bits/stdc++.h&gt;using namespace std;typedef pair &lt;int,int&gt; ...
2018-10-11 11:49:52 317
原创 Codechef :Fibonacci Numbers on Tree/FIBTREE(主席树)
传送门题解:这道题用二次剩余或者矩阵都可以做。相当于链剖之后维护一个区间加等比数列的可持久化线段树。 因为比相同,所以很好维护。#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long LL;const int RLEN=1&lt;&lt;18|1;inline char nc() { static ...
2018-10-11 08:41:37 219
原创 Codechef :Rectangle Query/QRECT (容斥+树套树)
传送门题解:CDQ分治什么不存在的。直接找不相交的,然后分八种情况维护一下即可。#include &lt;bits/stdc++.h&gt;using namespace std;const int RLEN=1&lt;&lt;18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &amp;&amp
2018-10-10 19:58:40 229
原创 Codechef :Children Trips/TRIPS(树分块)
传送门题解:设一个阀值kkk,小于kkk的倍增,大于kkk的暴力跳,这样的复杂度是O(nmk+nk)O(\frac{nm}{k}+nk)O(knm+nk)的,取k=mk=\sqrt{m}k=m最优,时间复杂度为O(nm)O(n \sqrt{m})O(nm)。不过空间开不下,要开小一点。同时有个结论:我们可以从两端跳到lca,最后拼起来,这样就大大降低代码复杂度了。#include &...
2018-10-10 18:58:10 379
原创 Codechef :Chef and Churu/FNCS(分块)
传送门题解:随便分一下块就好了。。#include &lt;bits/stdc++.h&gt;using namespace std;typedef unsigned long long LL;const int RLEN=1&lt;&lt;18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &amp...
2018-10-10 14:51:02 236
原创 Codechef :Counting on a Tree/TREECNT2(并查集)
传送门题解:第一个数据n=1让我调了一年。。。首先ans=∑xμ(x)f(x)ans=\sum_x\mu(x)f(x)ans=∑xμ(x)f(x),f(x)f(x)f(x)表示有多少条路径的值全为xxx的倍数。显然路径上的边权值肯定是xxx的倍数,我们对于每个xxx把所有他倍数的边加入图中。因为只用管μ(x)̸=0\mu(x) \not =0μ(x)̸=0的值,每个边最多位于272^...
2018-10-10 10:26:16 328
原创 Codechef :Chef and Balanced Strings/CBAL(分块)
传送门题解:分块SB题。#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long LL;const int RLEN=1&lt;&lt;18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &amp;&amp;
2018-10-09 15:50:20 315
原创 Codechef :A game on a graph/HAMILG(带花树)
传送门题解:一个点满足条件则不在某个最大匹配中。先求任意一个最大匹配,然后从每个不在匹配中的点再做一次,在队列中的都可以被替换掉。 用带花树即可。不过带花树的板不能乱改啊,否则容易GG。#include &lt;bits/stdc++.h&gt;using namespace std;const int RLEN=1&lt;&lt;18|1;inline char nc() {...
2018-10-09 10:35:27 243
原创 UOJ#397. 【NOI2018】情报中心(线段树合并+虚树)
传送门题解:WC,CTSC二合一真TM爽。两种路径的最大值分开求:1.lca不同,此时枚举相交的链中较下面的点,然后贡献可以线段树合并。2.lca相同,此时可以建虚树,然后变成和CTSC一样的问题。时间复杂度O(nlogn)O(n \log n)O(nlogn)。#include <bits/stdc++.h>using namespace std;typedef ...
2018-10-08 22:18:24 572
原创 UOJ#395. 【NOI2018】你的名字(SAM)
传送门题解:线段树维护fail树,然后t串暴力在s串fail树上跳,对每个后缀求出重合最多的一部分,然后自己再求一次即可。时间复杂度O(nlogn)O(n\log n)O(nlogn)。#include <bits/stdc++.h>using namespace std;const int N=1e6+50;struct SAM { char ch[N]; i...
2018-10-08 11:06:09 484
原创 UOJ#394. 【NOI2018】冒泡排序
传送门题解:考场上真的有debuff啊,下来看是道傻逼题。发现等价于最多由两个上升序列构成,然后就相当于记fi,mxf_{i,mx}fi,mx表示当前填到第iii位,最大值为jjj的方案数,下一个要么比mxmxmx大,要么是小于mxmxmx的第一个。发现这就是一个括号序列,比mx大就相当于加入若干左括号,然后iii往后挪相当于加入右括号,可以卡特兰数快速算一下了。对于每个固定的前缀,我...
2018-10-08 09:32:44 383
原创 LOJ#2339. 「WC2018」通道(边分治+虚树)
传送门题解:考虑两棵树怎么做,要求maxd1(x)+d1(y)−2∗lca1(x,y)+dis2(x,y)\max d_1(x)+d_1(y)-2*lca_1(x,y)+dis_2(x,y)maxd1(x)+d1(y)−2∗lca1(x,y)+dis2(x,y),把x′x&amp;amp;#x27;x′挂在xxx下面,长度为d1(x)d_1(x)d1(x),然后就是max−2∗lca1(...
2018-10-07 16:12:13 226
原创 LOJ#2554. 「CTSC2018」青蕈领主(分治FFT)
传送门题解:最长连续序列不能相交,那么只有包含关系。一个区间包含若干区间,我们可以先把这些区间内部确定,然后再把这些区间缩为一个点(因为连续),然后就只用解决长度为nnn且连续区间一定包含pnp_npn的方案数(否则就与LiL_iLi矛盾了)。令bpi=ib_{p_i}=ibpi=i,相当于是所有连续区间必须包含最大值,也就相当于必须包含最小值。记序列长度为nnn的答案为fnf_n...
2018-10-06 16:49:28 783 1
原创 LOJ#2553. 「CTSC2018」暴力写挂(边分治+线段树合并)
传送门题解:按照套路,变成求d1(x,y)+dx+dy−2∗d′lca′(x,y)d_1(x,y)+d_x+d_y-2*d&amp;amp;#x27;lca&amp;amp;#x27;(x,y)d1(x,y)+dx+dy−2∗d′lca′(x,y)然后出个二。在第二棵树里面做,相当于支持一下不同子树内部点距离的最大值。可以边分治,然后就跟线段树结构一样了,合并成了O(nlogn)O(n \log ...
2018-10-05 14:57:29 656
原创 BZOJ5223: [Lydsy2017省队十连测]有理有据题(KD树)
传送门题解:KD树支持矩阵加1,矩阵赋0,查询历史最大值。时间复杂度O((m+A)n+Clogn+qn)O((m+A)\sqrt{n} + C \log n + qn)O((m+A)n+Clogn+qn)。代码标记用了二元组,没把常数压下去。。#include <bits/stdc++.h>using namespace std;const int RLEN=1&l...
2018-09-28 10:49:41 336
原创 Bubble Cup 11(Codeforces 1045) 简要题解
传送门Last chance可以连两个的肯定可以增广,剩下的线段树优化见图跑网络流。输出方案可以dfs反向边来退流。
2018-09-27 14:58:39 353
原创 Codeforces 1045F: Shady Lady(凸包)
传送门题解:神题啊。题目等价于如果去掉任何一个单项式,剩下的多项式无下界,则输掉比赛。有个结论,一个多项式无下界,如果我们把每一项xaybx^ay^bxayb看做平面上的点(a,b)(a,b)(a,b)的话,最后的凸包上存在一个点的横坐标或者纵坐标是奇数。证明:1.全是偶数则有下界。考虑凸包上的所有点PiP_iPi,凸包内任何一个点(A,B)(A,B)(A,B)可以表示为∑iaiP...
2018-09-27 14:33:15 415
原创 BZOJ5218: [Lydsy2017省队十连测]友好城市(kosaraju算法)
传送门题解:利用kosaraju+bitset可以在知道邻接矩阵的情况下O(n232)O(\frac{n^2}{32})O(32n2)解决强连通分量计数。用回滚莫队即可在O(mm)O(m \sqrt{m})O(mm)的时间内获得所有询问的邻接矩阵了。 时间复杂度O(mm+qn232)O( m\sqrt{m} + q\frac{n^2}{32})O(mm+q32n2)。#includ...
2018-09-25 16:23:42 407
原创 Codeforces Round #512 (Div. 1) 简要题解
传送门Vasya and Triangle用叉积来计算面积就可以知道最后面积一定是 0.5 的倍数,也就是把kkk与nmnmnm约分后最后为111或者222。 然后分两种情况讨论即可。#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int RLEN=1&amp;lt;&amp;lt;18|1;inline char nc() { s
2018-09-25 12:04:32 304 3
原创 Codeforces Round #511 (Div. 1) 简要题解
传送门Enlarge GCD对于所有质数分开考虑,删除质数的指数最小的那几个数。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) && (...
2018-09-24 19:06:37 330 1
原创 BZOJ5220: [Lydsy2017省队十连测]异或与区间加
传送门题解:首先前缀异或处理一下,变成一堆数中两个异或为kkk。显然这是一一对应的关系,如果一对数中两个都小于n\sqrt{n}n个,直接暴力O(nn)O(n\sqrt{n})O(nn)解决。 否则在序列上O(n)O(n)O(n)解决一对数。 时间复杂度O(nn)O(n\sqrt{n})O(nn)。#include <bits/stdc++.h>using namesp...
2018-09-22 17:45:39 511
原创 NOI模拟:必去之
题解:fi=maxj{min{ai−aj,bi−bj}+fj+1}(j&amp;lt;i,pj&amp;lt;i)f_i = \max_j \{\min \{a_i-a_j,b_i-b_j\}+f_j+1\} (j \lt i, p_j \lt i)fi=jmax{min{ai−aj,bi−bj}+fj+1}(j&lt;i,pj&lt;i)其中aia_iai为没有填的数...
2018-09-21 15:55:19 489
原创 Codechef : CALLSCHE(网络流)
传送门题解:先强制每个点不休息,然后每个点可以分配一些休息的给其他人。 每个人每天也可以算出必须休息多少天。 用个上下界网络流即可。(后来发现自己傻逼了,直接最大流看有没有最大匹配就行了)。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() {...
2018-09-21 15:50:48 214
原创 NOI模拟:棋赢
题解:nnn很小,最后是一个跟sum有关的jjj次多项式。维护sumasum^asuma的和即可。 转移矩阵构造可以用拉格朗日插值法。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { stat...
2018-09-21 15:47:19 177
原创 Atcoder CODE FESTIVAL 2016Final G:Zigzag MST
传送门题解:把边掰到环上,然后取min,就只有O(n)O(n)O(n)条边了。#include <bits/stdc++.h>using namespace std; const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) && (...
2018-09-20 19:13:47 219
原创 BZOJ1921: [Ctsc2010]珠宝商(点分治+SAM)
传送门题解:点分治,如果点数≥n\ge \sqrt{n}≥n,则结合后缀树O(sze+m)O(sze+m)O(sze+m)处理出每个位置的开始,结束点并统计答案。否则从每个点开始暴力扩展路径。时间复杂度O(nn)O(n \sqrt{n})O(nn)。#include <bits/stdc++.h>using namespace std;typedef pair <...
2018-09-20 15:05:37 311
原创 Atcoder AGC013 简要题解
传送门Sorted Arrays贪心到前面第一个非法位置转移。#include <bits/stdc++.h>using namespace std; const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) && (ob=(ib=i...
2018-09-19 20:29:49 346
原创 Atcoder AGC012F : Prefix Median
传送门题解:先把aaa排序,bbb 序列能被构造出来,则:ai≤bi≤a2n−ia_i \le b_i \le a_{2n-i}ai≤bi≤a2n−i。不存在i,ji,ji,j,i&amp;amp;amp;lt;j,aj&amp;amp;amp;lt;ai&amp;amp;amp;lt;aj+1i \lt j,a_j \lt a_i \lt a_{j+1}i&amp;amp;lt;j,aj&amp;a
2018-09-19 09:42:29 700 2
原创 BZOJ4977: [Lydsy1708月赛]跳伞求生(线段树)
传送门题解:只能说出题人的脑洞是真的大。。把aaa和bbb一起排序,合法的序列是一个括号序列,我们贪心的维护这个括号序列的合法性即可。 可用线段树优化至O(nlogn)O(n \log n)O(nlogn)。#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long LL;typedef pair &lt;...
2018-09-18 15:31:57 294
原创 Codeforces 674F: Bears and Juice
传送门题解:首先考虑我们给每个桶固定一个有多少个熊去喝,那么最后可以通过个数来区分出这些桶。然后我们给每个桶固定具体哪几个去喝,最后可通过具体的熊确定是哪个桶。最后给每个去喝的熊分配一下是第几天去喝的,我们就可以唯一确定这个桶了。所以有:fi=∑k=0min{p−1,n}(nk)ikf_i = \sum_{k=0}^{\min \{p-1,n\}} \binom{n}{k} i^kf...
2018-09-18 14:12:44 358 2
原创 Codeforces 1037G:A Game on Strings(SG函数)
传送门题解:直接暴力SG函数求解即可。 可以证明有用区间只有O(26n)O(26 n)O(26n)个。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &...
2018-09-17 19:04:03 612
原创 Atcoder AGC027E : ABBreviate
传送门题解: 观察到模3意义下和始终不变就好做了。考虑任意ttt,判断是否能被sss转移出来我们可以贪心。那么我们直接对sss的每个位置贪心找后面的转移即可。 注意没有两个相邻要特判一下。#include &lt;bits/stdc++.h&gt;using namespace std;const int N=1e5+50, mod=1e9+7;inline void...
2018-09-17 09:19:31 502
pb_ds库在OI中的应用
2017-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人