- 博客(38)
- 收藏
- 关注
原创 北大集训2019 游记
赶在2019年最后一天补了这篇游记。Day -1跟dcx坐飞机到了北京,不知道第几次到首都国际机场了,不过听说南航要搬到大兴机场,所以可能是最后一次到这了?当地一个家长来接机,带我们去日料店,不过我们热情不太高,选择了一些主食(我是拉面)。酒店还是熟悉的中关新园9号楼。怎么说呢?那个楼层有一股旧时招待所的气息,不过房间倒是还好,住起来舒服。稍微安顿下来,看看b站就睡了。Day 0晚上...
2019-12-31 23:57:51 1589 1
原创 Atcoder agc036E
不会做的好题。先将连续的相同字符缩起来。不妨设这样得到的SSS中,出现次数按降序排列为AAA,BBB和CCC,显然这样答案的上界是3⋅C3\cdot C3⋅C的出现次数。设CCC有kkk个,那么中间有k−1k-1k−1个非空的仅含交替的ABABAB的段,两端还各有一个可以为空的仅含交替的ABABAB的段。若AAA和BBB出现次数相同,我们发现我们可以每次删掉一对相邻的ABABAB或BABABA...
2019-12-11 09:01:19 299
原创 Atcoder arc093F
简单的容斥DP。显然111所在位置是不重要的,不妨设p1=1p_1=1p1=1。那么我们可以发现111要比赛的人是另外NNN个大小分别为202^020,212^121,.........,2N−12^{N-1}2N−1的有序集合的最小值。111能获胜即等价于这些集合的最小值均不为AiA_iAi。直接算不好做,考虑容斥,钦定若干个AiA_iAi为某些集合的最小值。按iii从大往小考虑,设F...
2019-12-10 23:35:29 205
原创 Codeforces 708E
每行最后会剩下的显然是一个区间(可能为空),那么连通的条件即为每行剩余的区间非空,且相邻两行的区间均有交。先预处理出最终某行某一侧恰好删去了kkk个元素的概率。设F[i][j]F[i][j]F[i][j]表示仅考虑前iii行,它们连通且第iii行剩余区间的右端点为jjj的概率,注意左右端点是对称的。直接转移有点吃力,可以考虑简单的容斥一下,用前i−1i-1i−1行连通,且第iii行剩余区间左端点...
2019-12-10 23:24:23 219
原创 Codeforces 571D
做法很多,这里给一个比较优秀的仅使用并查集的做法。不管是大学还是军队,它们的合并关系其实给定了两棵树,每次即是合并两个点。合并的时候,我们可以新建一个虚点,让原来两个点所在连通块的根连到虚点,这样标记不会错位。这样如果仅有大学的操作,我们可以每次给某个连通块的根打一个加法标记,每次询问的即是某个点到连通块根路径的权值和,这个容易用带权并查集实现。现在加上了军队的操作,可以发现一个点我们仅需要知...
2019-12-10 23:14:04 230
原创 Codeforces 603E
易知一个无向图合法的充要条件是每个连通块的点数都是偶数(每次翻转一条路径即可同时改变两个点的度数奇偶性)。考虑从小到大按边权加入每条边,那么有用的显然只有MST上的边。进一步的,我们发现加入一条边后,原来无用的边显然不会有用。于是可以用LCT维护MST,每次尝试删掉最大边权的边,如果它树上两端的连通块大小均为偶数即可删掉,这个也可以方便地维护。实现的时候,一开始连上n−1n-1n−1条边权为i...
2019-12-10 23:06:45 215
原创 Atcoder agc021E
易知一只变色龙最后是红色,当且仅当他吃的红球比蓝球多或红蓝数目相等且最后一个是蓝球(至少吃一个红球)。考虑如何判定一个方案是否合法。显然一个合法的方案红球数目不小于蓝球,不妨设红球比蓝球多ppp个(p≥0p\geq 0p≥0),那么红球有K+p2\frac{K+p}{2}2K+p个,蓝球有K−p2\frac{K-p}{2}2K−p个,这里要求红球数目至少是NNN。显然当p≥Np\geq N...
2019-12-10 22:59:28 276
原创 Codeforces 590E
终于会证明dilworth定理了。。。定义一个字符串a≤ba\leq ba≤b当且仅当aaa是bbb的子串,显然≤\leq≤是一种偏序关系。那么问题转化为求出最长反链。首先需要知道字符串间的偏序关系。将所有字符串建出AC自动机并求出fail树,就容易知道每个字符串有哪些字符串为其子串。不过暴力做需要跳整条fail链,注意到子串关系有传递性,于是我们只记录每个点fail链上能跳到的最近的字符串,...
2019-12-10 22:46:03 348
原创 Atcoder agc031D
漏了一题可还行。。。这个显然是我不会的群论题,虽然也不用太高深的知识,可能说是找规律题更合适。用置换的符号,可以发现f(p,q)=q⋅p−1f(p,q)=q\cdot p^{-1}f(p,q)=q⋅p−1,这里⋅\cdot⋅指的是置换的复合。于是有:a1=pa_1=pa1=pa2=qa_2=qa2=qa3=qp−1a_3=qp^{-1}a3=qp−1a4=qp−1q−1a_4=...
2019-12-10 22:05:00 262
原创 Atcoder agc026E
对于第iii组匹配的aaa和bbb,我们可以将按位置将它们称为(pi,qi)(p_i,q_i)(pi,qi)。将原序列中的aaa看做111,bbb看做−1-1−1,那么前缀和为000的位置就将序列分为了若干段。显然每组pip_ipi和qiq_iqi都在同一段中,且同一段中相应的pip_ipi和qiq_iqi的大小关系不变。我们称pi>qip_i>q_ipi>qi...
2019-12-10 20:12:22 270
原创 Atcoder arc096E
显然考虑容斥,求出钦定前kkk种调料最终使用不超过111次的方案数F[k]F[k]F[k]即可。考虑如何求出FFF。对于一个方案,我们可以考虑其中所有使用了这kkk种调料中某几种的拉面,那么它们显然将这kkk种调料中用了一次的调料分为了若干个非空集合,不妨设分成了ccc个集合,枚举用了一次的调料数目,可知对应的方案数为∑i=ck(ki)⋅s(i,c)⋅22n−k⋅2c⋅(n−k)\sum_{i=...
2019-12-10 19:59:05 507
原创 Codeforces 685C
再次给一个愚蠢做法。考虑将xxx和yyy坐标转化成切比雪夫距离,那么两个点(x1,y1,z1)(x_1,y_1,z_1)(x1,y1,z1)和(x2,y2,z2)(x_2,y_2,z_2)(x2,y2,z2)之间的曼哈顿距离可以写成max(∣(x1+y1)−(x2+y2)∣,∣(x1−y1)−(x2−y2)∣)+∣z1−z2∣\max(|(x_1+y_1)-(x_2+y_2)|,|...
2019-12-10 19:38:54 350
原创 Codeforces 587F
对所有子串建出AC自动机,并求出fail树。考虑对询问区间差分一下后从左到右扫描线处理,那么可以变为两种操作:对fail树上某个子树中所有点的权值+1+1+1,查询某个字符串对应的所有节点的权值和。这里给出一个做法,我们可以将每个节点映射到二维平面上,两维坐标分别是fail树上的dfs序和所属字符串的编号,那么原问题就变为给横坐标在某个区间内的所有点+1+1+1和求出纵坐标===某个数的所有点的...
2019-12-10 19:24:22 234
原创 Codeforces 587D
给一个愚蠢做法。考虑每种颜色的边构成的子图。显然有某个点度数>2>2>2无解,于是每个连通块只能是环或链。对于环,如果是奇环显然无解,偶环的话里面每个点都必须用到(已经被用到也无解),直接取两种情况较小的即可。对于链,非两个端点的点都必须用到(否则也无解),如果链的边数为奇数,可以额外用到两个端点,可能得到更小的答案,如果为偶数,必须恰好多用一个端点,得到两个方案。考虑二分答...
2019-12-06 22:47:39 199
原创 Atcoder arc091F
显然是算SG函数。打个表出来,会发现SG(n,k)SG(n,k)SG(n,k)当n mod k=0n\bmod k=0nmodk=0时为n/kn/kn/k,不过其他情况下似乎不能直接O(1)\mathcal O(1)O(1)得出。仔细分析一波,容易归纳证明SG(n−⌊nk⌋,k)SG(n- \lfloor \frac{n}{k} \rfloor,k)SG(n−⌊kn⌋,k)到SG(n,k)S...
2019-12-06 22:27:17 274
原创 Codeforces 674F
先令p=min(p,n−1)p=\min(p,n-1)p=min(p,n−1),这样可以理解为我们至多能损失ppp只熊。设F[i][j]F[i][j]F[i][j]表示还有iii天,至多还能损失jjj只熊能区分出的最多桶数目,所求即为F[1][p]F[1][p]F[1][p]~F[q][p]F[q][p]F[q][p]。那么我们考虑一次操作后会发生的情况,我们会将所有桶根据喝了它的熊的情况划分...
2019-12-06 22:10:58 276
原创 Atcoder agc028F
考虑从大往小枚举左上角(i,j)(i,j)(i,j),求出所有能到达的点的权值和sum[i][j]sum[i][j]sum[i][j]。如果(i,j+1)(i,j+1)(i,j+1)和(i+1,j)(i+1,j)(i+1,j)中至多只有一个非障碍格子,那么容易计算。否则直接加上sum[i][j+1]sum[i][j+1]sum[i][j+1]和sum[i+1][j]sum[i+1][j]sum[...
2019-12-06 21:46:52 470
原创 Atcoder agc035F
完全不会的神仙结论题。考虑对于一个方案(k1,k2,...,kN,l1,l2,...,lM)(k_1,k_2,...,k_N,l_1,l_2,...,l_M)(k1,k2,...,kN,l1,l2,...,lM),如果∃1≤i≤N\exist 1\leq i\leq N∃1≤i≤N使得lki+1=il_{k_i}+1=ilki+1=i,那么将kik_iki减去111,lkil_...
2019-12-06 21:00:54 220
原创 Codeforces 575I
只讨论dir=1dir=1dir=1的情况。点(x,y)(x,y)(x,y)在三角形(x0,y0,len)(x_0,y_0,len)(x0,y0,len)内部或边界的充要条件为x≥x0x\geq x_0x≥x0,y≥y0y\geq y_0y≥y0且x+y≤x0+y0+lenx+y\leq x_0+y_0+lenx+y≤x0+y0+len。直接做是一个四维偏序(还有一维时间),不可通...
2019-12-06 20:29:06 180
原创 Codeforces 671E
考虑对于一个给定的区间如何计算最小代价。令gig_igi取负求出前后缀和。我们的策略显然是贪心的从左往右考虑,每次前缀和lsum>0lsum>0lsum>0就减到000,再从右往左做一次,每次剩余的后缀和rsum>0rsum>0rsum>0就减到000。这样可以发现最小代价是maxi(maxj≤ilsumj+maxj≥irsumj)\max_i (\max...
2019-12-06 20:19:41 167
原创 Atcoder arc101E
简单的容斥DP。考虑容斥,钦定某些边不被任何路径经过。这样就将原树分为了若干个连通块,每个连通块内部需要两两匹配,注意这样的每个连通块需要有偶数个点。考虑DP,设F[i][j]F[i][j]F[i][j]表示考虑以点iii为根的子树,iii所在的连通块有jjj个点,除iii所在的连通块以外的点已经容斥后匹配好了的贡献。转移的时候大致是合并若干个子树的背包,并讨论一下跟父亲的边是否容斥掉即可。...
2019-12-06 19:38:50 265
原创 Codeforces 504E
对原树做轻重链剖分,那么每条路径可以变为O(logn)\mathcal O(\log n)O(logn)段dfs序上区间的连接。那么对于dfs序维护正反串的hash值,就容易判断两个区间对应子串是否相等。注意到我们可以用two pointer跳过完全相等的整段,在最后一段二分LCP长度即可。时间复杂度O(n+mlogn)\mathcal O(n+m\log n)O(n+mlogn)。#i...
2019-12-06 19:32:41 214
原创 Atcoder arc095F
考虑逆排列p−1=qp^{-1}=qp−1=q,那么就是对于∀1<i≤n\forall 1<i\leq n∀1<i≤n,qiq_iqi与maxj=1i−1qj\max_{j=1}^{i-1}q_jmaxj=1i−1qj间连了一条边。那么容易发现连出来的树是一个毛毛虫的形状,其中主链上的点是所有qqq的前缀最大值。那么显然将给定的树的直径拿出来贪心算一下即可,注意q1q_...
2019-12-06 19:25:16 213
原创 Codeforces 708D
简单的上下界费用流。对于fi≤cif_i\leq c_ifi≤ci的边,实际流量为kkk的代价为{fi−k,0≤k<fik−fi,fi≤k≤ci(ci−fi)+2(k−ci),k>ci\begin{cases}f_i-k,0\leq k<f_i\\k-f_i,f_i\leq k\leq c_i\\(c_i-f_i)+2(k-c_i),k>c_i\end{c...
2019-12-06 19:17:04 232 1
原创 Codeforces 585F
真实迷惑题,这个3200分不知道是怎么标上去的。考虑计算出不是half-occurrence的串数目。把所有sss长度为⌊d2⌋\lfloor \frac{d}{2}\rfloor⌊2d⌋的子串插入一个AC自动机,然后对xxx和yyy做个数位DP即可。DP的时候需要预处理出F[i][j]F[i][j]F[i][j]表示当前在AC自动机上的节点iii,走jjj步后仍然没有包含任何一个sss长度为...
2019-12-06 19:03:39 143
原创 CSP2019 游记
比赛过去比较久了才补游记,所以细节可能记不太清了。Day -?考了个一轮认证,感觉比前NOIP简单,作为一名去年NOIP初赛7字头的选手居然拿到了满分。Day 1昨天晚上看了很久的beastars,确实是很好的作品,可惜不适合在考前看,晚上根本睡不着觉。早上昏昏沉沉地去学校考试,考前涂了点风油精,还给几个同学涂了一下,脑子稍微清醒了一点。想到毕竟是对标前NOIP的比赛,倒不是很慌(NOI...
2019-12-01 17:56:04 566
原创 Atcoder agc036F
当时改题的时候没有意识到这个奇怪题意给出的性质,结果完全不会。这个问题本身大致是一个不太可做的完美匹配计数,不过我们注意到对于每个iii,它能匹配到的PiP_iPi是一个区间[Li,Ri][L_i,R_i][Li,Ri],且LLL与RRR均单调不增。如果所有iii均有Li=0L_i=0Li=0,那么我们容易对RiR_iRi排序后O(N)\mathcal O(N)O(N)计算。考虑一...
2019-12-01 17:13:02 239
原创 Atcoder agc028C
考虑将所有的AAA和BBB从小到大排序。若前nnn小中全部都是AAA或全部都是BBB容易构造达到下界。否则若同时存在某个AiA_iAi或BiB_iBi也可以构造达到下界(同时存在AiA_iAi和BiB_iBi的iii的个数等于同时不存在AiA_iAi和BiB_iBi的iii的个数,那么我们可以在环上交替放两种数,最后将剩余的只存在AiA_iAi或只存在BiB_iBi的数插在它们之...
2019-12-01 16:49:23 241
原创 Codeforces 521D
对于每种技能,我们执行操作的顺序显然是111->222->333,并且最多做一个111操作(做的话会做最大的那个),那么就可以把111操作转化为222操作了。然后将每种技能iii的222操作从大到小排序,设排序后第jjj个操作的权值为bi,jb_{i,j}bi,j,那我们显然会选一个前缀执行。于是我们可以将222操作转化为333操作,具体的,我们可以将第jjj个操作变为乘上ai+∑...
2019-12-01 16:39:33 224
原创 Atcoder agc023F
考虑相邻交换的思想,对于两个相邻的段xxx和yyy,若它们交换后仍然合法且s1x⋅s0y≤s1y⋅s0xs1_x\cdot s0_y\leq s1_y\cdot s0_xs1x⋅s0y≤s1y⋅s0x,我们交换它们后答案不会变劣。现在对于树上的情况,我们取出目前没有被选且s1s0\frac {s1}{s0}s0s1最小的连通块,若它的根的父亲已经被选,我们就选了它,否则容易证明它一定会...
2019-12-01 16:14:06 389
原创 Atcoder agc032C
这题是个大讨论题。因为图连通且每条边恰经过一次,所以三个环可以拼成一个欧拉回路,因此可以尝试从欧拉回路的角度考虑。原图必须存在欧拉回路,有奇点显然无解。有度数≥6\geq 6≥6的点一定有解(任取一条从该点出发的回路,至少经过该点333次,每次即为一个环)。否则若度数全为222或仅有一点度数为444显然无解。还可以发现若存在至少333个度数为444的点也一定有解(设三个点为A,B,C,同...
2019-12-01 16:00:22 353
原创 Codeforces 585E
容易发现我们可以去掉买的邮票不在送的邮票集合中的限制。考虑反演,我们先算出F[i]F[i]F[i]表示价格为iii的倍数的邮票个数,这个可以用类似埃筛的高维后缀和做到O(VloglogV)\mathcal O(V\log \log V)O(VloglogV)。然后我们容易对i>1i>1i>1算出G[i]G[i]G[i]表示买的邮票和送的邮票的gcd\gcdgcd为iii的...
2019-12-01 15:58:32 167
原创 Codeforces 666E
感觉古老场次的字符串题一般都比较简单?大概先把sss和tit_iti一起建一个广义SAM,在上面做一个下标为编号的线段树合并预处理出每个节点子树内的信息。每次查询的时候需要先将[pl,pr][p_l,p_r][pl,pr]定位到广义SAM上的节点,这个用一个倍增做就好了。时间复杂度O((∣s∣+∑i=1m)⋅(26+logm)+qlogm)\mathcal O((|s|+\sum_...
2019-12-01 15:48:26 289
原创 Atcoder agc025E
自闭选手又做不出构造题了,关键是没想到把两条路径合并成一条。先猜测结论,答案可以达到∑i=1N−1min(2,ci)\sum_{i=1}^{N-1} \min(2,c_i)∑i=1N−1min(2,ci)的上界,其中cic_ici是经过第iii条边的路径数目。考虑每次缩掉一个度为111的节点uuu的构造。设跟uuu直接相连的边为iii。若ci=0c_i=0ci=0可以直接缩,ci=...
2019-12-01 15:36:03 475
原创 Codeforces 568C
先特判掉没有元音或辅音的情况。我们考虑按位贪心,先尽可能的最大化答案跟sss的LCP长度,枚举第一个比sss大的位后后面就可以随便选了(对于每个位只用枚举比它大的最小的元音或辅音)。因为既有元音又有辅音,我们判定的时候只需要确定每个位是元音还是辅音即可。判定的过程显然是一个2−sat2-sat2−sat。求出来后还要贪心确定后面的位是取元音还是辅音,类似做就行了。时间复杂度O(nm)\math...
2019-12-01 15:20:56 268
原创 Atcoder arc100F
正难则反,考虑计算所有不colorful的序列SSS的贡献和。我们称一个序列是diff的当且仅当它不存在两个值相同的元素,那么colorful的定义就是包含一个长度为KKK的diff序列。先预处理出F[i][j]F[i][j]F[i][j]表示长度为iii且不colorful的序列中有多少个包含结尾的极长diff子序列长度恰为jjj的。这个可以用简单的DP实现。我们可以注意到一个事实,所有不...
2019-12-01 15:12:26 263
原创 Codeforces 704C
很恶心人的题。我们考虑把每个变量当做无向边,那么每个点的度数至多是222。因此每个连通块忽略自环后都是链或环,都可以用DP求出来答案。大概对于链的话,记录F[i][j=0/1][k=0/1]F[i][j=0/1][k=0/1]F[i][j=0/1][k=0/1]表示考虑到链的第iii个位置,上个变量的取值为jjj,目前已经确定的子句的异或和为kkk,转移直接枚举下一个变量的取值即可。环的话找一个...
2019-12-01 14:36:34 243
原创 Codeforces 568E
怎么还有卡空间题。。。设原来给定的序列为aaa,能填的序列为bbb。考虑经典LIS的O(nlogn)\mathcal O(n\log n)O(nlogn)做法,我们维护了一个数组F[i]F[i]F[i]表示长度为iii的上升子序列的最小结尾,每次可以二分。我们可以魔改一下这个做法,对于ai≠−1a_i \neq-1ai=−1的位置仍然二分,对于ai=−1a_i=-1ai=−1的位置我...
2019-12-01 14:30:55 220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人