鸽子的题解太多了。只好直接写。
- GYM
- 雅礼集训
- LOJ6029. 「雅礼集训 2017 Day1」市场
- LOJ6030. 「雅礼集训 2017 Day1」矩阵
- LOJ6031. 「雅礼集训 2017 Day1」字符串
- LOJ6032. 「雅礼集训 2017 Day2」水箱
- LOJ6033. 「雅礼集训 2017 Day2」棋盘游戏
- LOJ6034. 「雅礼集训 2017 Day2」线段游戏
- LOJ6035. 「雅礼集训 2017 Day4」洗衣服
- LOJ6036. 「雅礼集训 2017 Day4」编码
- LOJ6038. 「雅礼集训 2017 Day5」远行
- LOJ6039. 「雅礼集训 2017 Day5」珠宝
- LOJ6040. 「雅礼集训 2017 Day5」矩阵
- LOJ6041. 「雅礼集训 2017 Day7」事情的相似度
- LOJ6045. 「雅礼集训 2017 Day8」价
- Codeforces
- CF1358F Tasty Cookie
- CF1367F2 Flying Sort (Hard Version)
- CF1368E Ski Accidents
- CF1374E2 Reading Books (hard version)
- CF1380G Circular Dungeon
- CF1384D. GameGame
- CF1387B1 Village (Minimum)
- CF1387B2 Village (Maximum)
- CF1399E2 Weights Division (hard version)
- CF1354C2. Not So Simple Polygon Embedding
- CF1354F. Summoning Minions
- CF1354G. Find a Gift
- CF1421E. Swedish Heroes
- CF1353F. Decreasing Heights
- CF1353E. K-periodic Garland
- CF1427E . Xum
- CF1344D.Résumé Review
- CF1344C Quantifier Question
- CF1363F Rotating Substrings
- CF1408E Avoid Rainbow Cycles
- CF1408F Two Different
- CF1422F Boring Queries
- CF1437G - Death DBMS
- CF1436F. Sum Over Subsets
- CF1443F - Identify the Operations
- CF1443E - Long Permutation
- CF19D
- CF204E Little Elephant and Strings
- CF793C Mice problem
- CF1285E Delete a Segment
- CF1451E Bitwise Queries
- CF1452E Two Editorials
- CF1158B The minimal unique substring
- CF1158C Permutation recovery
- CF1251E2 Voting (Hard Version)
- CF1283F DIY Garland
- CF1461F Mathematical Expression
- CF1462F The Treasure of The Segments
- CF1463E Plan of Lectures
- CF1464B Grime Zoo
- CF1464C Poman Numbers
- 洛谷
- Atcoder
- 牛客
GYM
2019-CCPC-哈尔滨
B. Binary Numbers
$f(a,b)$即$a,b$的最长公共前缀长度,然后暴力打表,可以知道$a,b$越相近,$f(a,b)越大$,从每个区间里选出一个代表数字$A i$,如果对于所有区间$i$,满足$f ( A_i , k ) ≥ f ( A_j , k )$,$L_i≤k≤R_i$。
显然根据单调性
- $f ( A_{i-1} , R_{i-1} ) ≥ f ( A_{i} , R_{i-1})$
- $f ( A_i , L_i ) ≥ f ( A_{i-1} , L_i )$
$f ( A_{i-1} , L_i ),f ( A_{i-1} , R_{i-1} )$当作$dp[i-1][][]$的状态去转移,根据两个条件看是否转移,以及更新状态即可。
E. Exchanging Gifts
请先搞清楚,基本最大快乐值如何求。
两个操作可以想成一颗树,然后根据最后需要的向下类似$dp$,最后得到某些数的数量。
就是比较最大值和总和之间大小的分类讨论。
I. Interesting Permutation
考虑每次就相当于一个区间长度,$tmp=$可插空位
- $h_{i+1}=h_i$,$ans=ans\times tmp,tmp-1$
- $h_{i+1}>h_i$,$ans=2\times ans,tmp=tmp+h_{i+1}-h_i-1$,表示新的数可以插前面和后面。并且更新可插空位。
L. LRU Algorithm
找到规律发现,内存其实无所谓,假设内存无限大,那么对于有内存去前面$k$个即可,轻松可以预处理$hash[n][k]$,然后每次暴力查找即可。注意$0$。
300iq Contest 1
B.Best Subsequence
逆向思维取删出相邻最大的一定最优。用$set$模拟即可。
C.Cool Pairs
转化成$a_i< -b_j=z_j$,这类构造先考虑$k=0$,直接$z_j=-n$,再将$a_i$按照顺序变$[-n,-1]$。然后慢慢调整$z_j$大小。
- 如果不够,直接设$z_j=1$,就可以覆盖$j-1$个$a_i$。
- 如果够了,将$i<j$的$a_i$,排个序找到第$k$小的$a$,$z_j$直接等于就好了,并且结束,由于$a_i$是负的,保证$z_j$单调递减。
D. Dates
每个妹子匹配一个时间区间,每个时间最多选择𝑎𝑖个妹子,每个妹子有一个快乐值,最大化总快乐值。
由于一个妹子最多只会占用其他妹子的约会时间,所以贪心的选择快乐值总没错。
那么题意就变成选择妹子是否可以保证能成功过匹配。
对于任意区间$[i,j]$,区间$[i,j]$中选中妹子的数量需要小于等于这个区间和。
此时相当于判断是否所有子集的邻域(即与其相邻的点构成的集合)大小都比子集本身大。由于$L_i\leq L_{i+1},R_i\leq R_{i+1}$,左侧的区间的情况只有$n^2$种。
$c[j]-c[i-1]\leq s[r_j]-s[l_i-1]$
$c[j]-s[r_j]\leq c[i-1]-s[l_i-1]$
考虑我加入一个选中一个妹子的时候左侧$[j,n]$会发生变化。右侧$[j+1,n]$会发生变化。判断变化的那端是否发生左侧最大值$[j,n]$是否大于右侧最小值$[1,j]$了。
不然撤回操作。
F. Free Edges
问至少删掉多少条边后图中不存在环。并茶几瞎几把找一找就好了
K. Knowledge
每次可以删加掉$aa$,$bb$,$ababab$。
发现任何字符串都可以变成一个最短无法变短字符串
找到关键的几个变化
- $aa\rightarrow$
- $bbb\rightarrow$
- $abba \rightarrow bab$
- $ababa\rightarrow bb$
- $abba\rightarrow bab$
- $baba\rightarrow abb$
多写一点就好了,然后发现就$12$个为基底的字符串。
然后即从$k$长度的字符串变成$s$,考虑$12$个的互相变换关系,相当与走路径一样,查看从$x$走到$y$有几种走法,这里就是从空字符串走$k$步,有多少种变成$s$的路径种类,矩阵快速幂即可。
ICPC Asia-East Continent Final
H.King
找到$qa_i \equiv a_{i+1} \pmod p$,$\geq n/2$的最长子序列。
$q\equiv a_{i+1}a^{-1}_i \pmod p$
$\geq n/2$的最长子序列。必定存在相邻的$a_i$。
随机化枚举即可。
雅礼集训
LOJ6029. 「雅礼集训 2017 Day1」市场
当线段树上的点$max[pos]-min[pos]< d$就会变成减法,而$\sum a_i+d$,只会改变两个$max-min$。即我最多需要除$qlog(q\times 10^4)$。
需要一个支持最大值,最小值,区间和的线段树即可。
LOJ6030. 「雅礼集训 2017 Day1」矩阵
先构造一行都是#,然后填充竖即可。(注意需要注意已经$ok$的竖,以及填充此行只需要有这行的竖,或者花费一次构造这个竖
LOJ6031. 「雅礼集训 2017 Day1」字符串
$qk\leq 10^5$
$k\leq 300$,暴力跳所有子串,然后暴力二分询问$mp[l][r],在[a,b]$中有几个,可以离线做到$O(qk^2)$,在线就是$O(qk^2\log n)$
$q\leq300$,从$1$走子串保证后缀那种,每走到$r$,需有所有的$l$,这个时候倍增往上跳寻找$siz$最大。$O(qm\log n)$
LOJ6032. 「雅礼集训 2017 Day2」水箱
按照高度排序,(注意这里需要先合并再处理那些条件),$ans[x]$表示$x$个块的答案,$f[x]$表示目前为止有水需求的数量。
- 考虑合并,合并答案即可。
- 考虑有水,则$f[find(x)]$++,更新答案$ans[x]$
- 考虑无水,则直接更新$ans[x]$
LOJ6033. 「雅礼集训 2017 Day2」棋盘游戏
二分图博弈,即找到那些点是非必须点。即删除了之后对最大匹配没影响。考虑一个非匹配点𝑥,假如它连向了一个匹配点𝑦,那么它就能替换掉当前当前和这个匹配点匹配的点𝑧,而这时𝑧也可以进行同样的操作。
首先根据时间戳的匈牙利算法可以找到所有可能的匹配点,然后找非匹配点。
于是我们从每个非匹配𝑥出发进行𝑑𝑓𝑠,途经的和𝑥同一集合的点都满足要求。
LOJ6034. 「雅礼集训 2017 Day2」线段游戏
李超线段树模版题。
LOJ6035. 「雅礼集训 2017 Day4」洗衣服
考虑只洗衣服,则用优先队列维护当前最小洗衣时间。就可以得到洗$k$间衣服需要的最短时间。同样处理烘干衣服的时间。
考虑到所有衣服都被烘干后烘干机全部是空的,可以把这个过程倒过来,这样子就和洗衣服一样。即当$i$衣服洗完后,选如果当第$p_i$烘干的则时间
顺序和大于等于乱序和大于等于逆序和,求个逆序和即可。
LOJ6036. 「雅礼集训 2017 Day4」编码
可以得到一个$O(n^2)$的2-SAT。
考虑如何优化
首先按照长度排序,就可以减少不必要的分类讨论。
如果有遍历到前缀,那么连接两个点表示不能同时成立。
在最后不能把这个情况直接压入终止节点,会导致某个节点太多点。考虑每次新建点,$new$不能与$old$同时成立,但需要和$tmp$同时成立。
LOJ6038. 「雅礼集训 2017 Day5」远行
只可能是直径上的点,用LCT和并查集动态维护直径即可。
LOJ6039. 「雅礼集训 2017 Day5」珠宝
对于$C$一样的物品,我们要选肯定是要先选价值大的,所以$sum$数组是一个上凸的
$i<j$且$i$的决策点为$p$,即有任意$s<p$满足 $dp[s]+sum[s,i]<dp[p]+sum[p,i]$,然后决策单调性即可。
LOJ6040. 「雅礼集训 2017 Day5」矩阵
咕咕
LOJ6041. 「雅礼集训 2017 Day7」事情的相似度
建好link树之后。
- 给定一棵树,每个点有一个权值$(𝑚𝑥𝑙𝑒𝑛)$,询问编号在一段区间内的点两两之间$𝑙𝑐𝑎$权值的最大值。
离线来看,对于一个点他到根节点的都要打上标记,如果下次访问到则表示存在$lca$.其实就是动态维护所有的$lca$出现的时机。
若遇到了以前打的标记,则该节点为旧标记与新标记的$lca$ 。贪心可得应把标记尽量覆盖为较大的值,已经只会维护$[i,r]$之间区间。
LOJ6045. 「雅礼集训 2017 Day8」价
Codeforces
CF1358F Tasty Cookie
- 翻转$a$数列
- 将$a$数列变成他的前缀和
前缀和不断增大得很快。$n\geq 3$模拟即可,你问我咋模拟,$std$,满足单调增就差分,不满足就倒置,否则就$-1$。
$n=2$,就特别麻烦。
- 根据上题,我们需要把本来差分的部分快速差分,
- 如果快速差分过程中出现$a$数组,两两特判。
- 以上情况都没有并且被差分到某个数$=0$,$-1$
之后就是看清题意写整齐
CF1367F2 Flying Sort (Hard Version)
我们可以发现,中间的数字是不能插进去的,所以这组数是在排序后仍相邻的数,则要找到最长的子序列。
对于相同数字的考究。
- 如果一个数当第一位以及最后一位,数量是可以任意。
- 否则必须全部数字加进去。
先离散化一下。
我们可以这样$dp$,$dp[i]$,表示$[1,i]$最长的不严格增序列
- 把$a[i]-1$当中间的数字,则$dp[i]=dp[l[a[i]-1]+cnt[a[i]-1]$
- 把$a[i]-1$当第一的数字,则$dp[i]=cnt[a[i]-1]+1$
- 把$a[i]$当最后一位的数字,则$dp[i]=dp[pre[a[i]]]+1$
CF1368E Ski Accidents
有 $n$ 个顶点,以及 $m$条有向边,所有有向边$(u,v)$ 均满足 $u<v$ ,且所有顶点的出度都不超过 $2$ ,要求从中删去不超过 $\frac{4}{7}$个顶点,使得图中不存在长度超过$1$ 的路径。
如果是完全二叉树显然可以的$4/7$。考虑反向建边,如果找到长度为 $2$的路径的顶点时,将顶点 $i$ 删掉即可,并且由于题目所给$u<v$,就不会有后效性了。
CF1374E2 Reading Books (hard version)
思路很明显,先离散化离线,后面做权值线段树第$k$大。别把线段树写错了。
CF1380G Circular Dungeon
自己做出来的,按照宝箱大小去分配遇到$k$个之前的价值。这里可以提前预处理,前缀和即可。注意下无法$(n-i)\mod i \not = 0$即可。
CF1384D. GameGame
对于每位来说如果异或位$0$,则这位没影响。
考虑最高位异或不为$0$,必定在此有决战,且必定有奇数个$1$。观察下可得如果都是$1$,则$cnt\mod 4=1$。或者$cnt\mod 4=2,(n-cnt)\mod 2=1$,拿到奇数个$1$之后有$0$拿。
CF1387B1 Village (Minimum)
简单的树形$dp$。
CF1387B2 Village (Maximum)
答案显而易见$\sum min(n - siz[i], siz[i])$。
看怎么合理分配。$min(n - siz[i], siz[i])\leq n/2$,也就是路径必须经过重心
则答案一定产生在重心的子树里,$siz[i]\leq n/2$,也一定是重心的每个子树里的点互相匹配。
这个序列的第$i$项和第$i+\lfloor\frac{n}{2}\rfloor$,匹配,注意$n\&1$,有个点会保持不变,其实此时交换不会发生变化,随便找个点互换即可。
CF1399E2 Weights Division (hard version)
分类花费硬币的价值每个边权计算$/2$给予的价值。可以提前$n\log$处理,反正除我之前一定要除我之前的。
就变成花费硬币$1$,所以直接枚举一个的种类使用的数量,再二分或者单调队列另一个。
CF1354C2. Not So Simple Polygon Embedding
求$n$为奇数,$n$为偶数
- 可以变成扩大变成偶数,偶数就是非常简单。
- 选择$\frac{pi}{2n}$,不要被六边形迷惑计算。
CF1354F. Summoning Minions
解释一下为啥是一定是前$k-1$张放下,然后$n-k$张放了就拿走,最后一张再放下。
首先无论怎么放终究是$\sum a_i+(k-1)\sum b_i+\sum (j-1)b_j$。
这样肯定是最优的,然后其实就是枚举所有最后留在桌子上的$C_n^k$张权值就定了。一定不会错过最优解,然后知道了就简单的二维$dp$。
CF1354G. Find a Gift
注意$k\leq \frac{n}{2}$,就可以随机化确定$1$是否为礼物了。只要出现小的一定是礼物。显然随机化$k$,如果是礼物一定会出现$2$。否则是石头是不会出现$2$的。
然后就可以通过一次次倍增确定$[1,2^k]$是否为石子, 也可以发现$(2^k,
2^{k+1}]$,然后既然我知道有可以对比的任何小于区间的石头,就可以轻松用二分找到最左端的礼物在哪了。
CF1421E. Swedish Heroes
找到规律一定是正负交替,并且发现只需要$(n+\sum [p_i=-1])\mod 3=1$。并且不能为$+-+-+$这样显然不可能。设$m=\sum [p_i=-1]$,$dp[n][m][last][flag]$,$last=$最后一个$a_i$的正负,是否当前为$+-+-$
CF1353F. Decreasing Heights
一定有元素不变,直接枚举不变的$O(n^4)dp$
CF1353E. K-periodic Garland
看错题意+失误,类似于求子段最大和一样即可。注意$dp$可以重头开始,也可以接后面的。
CF1427E . Xum
通过给定的$a$,$a$为奇数,操作$\oplus, +$构造出一个$1$,显然$ax-by=1$即可。构造一个互质的$y$即可,暴力枚举$(a\times(2k+1)\oplus a)$,然后注意范围$ax\leq 10^{12}$,$x\times t$这个好构造。注意控制大小。
CF1344D.Résumé Review
暴力很好想,把$a_i-3x^2+3x-1$,放到优先队列里面一个一个取。
而这里巧妙枚举了最后结束的$\Delta f(i,x)$,可以判断每个最多可以取多少。(这里再用二分)。
然后细节就需要,因为可能有好几个相同的值,所以二分时候往大的方向取答案,即找到满足条件的尽可能小的值,然后由于可能多了使用次数,找到$=ans$,—。
CF1344C Quantifier Question
题意很恶心,注意$x$成立是有顺序的,显然有环不可能。然后所有存在一定可能,然后发现如果出现一个任意,递推到我的和我递推的都要变成存在,又因为$a<b,b<c,a<c$,具有传递性,就是说跑这个有向图跑到的点都要变成存在(别忘记跑反图。然后我们发现只要被任意一个图跑到的节点,他的值也确定了,我的反图和正图那些也不能任意了,要做一样的操作。
CF1363F Rotating Substrings
给定两个长度为 $n$ 的字符串 $s$,$t$。定义一次操作为选择 $s$ 的一个子串 $s_{l, l +1, \dots, r}$
,然后将之修改为 $s_{r, l, l + 1, l + 2, \dots, r - 1 }$s
请求助使 $s$ 与 $t$ 相等的最小操作次数。无解输出 $-1$。
$S$的前$i$个字符和$T$的前$j$个字符匹配的最小花费
每一个操作可以让一个字符提到前面的任何位置,并不能提到到后面,最少的操作次数是$n$ - 两个字符串的最长公共子序列。
但是对于$acbd,adbc$。匹配到第三个字符的时候,显然不能把$c$放到后面去。这个时候在做最长公共子序列。我们需要加上一个条件,$s$的每个字母后缀数量必须比$t$多即可。
CF1408E Avoid Rainbow Cycles
如果我保留某个元素,那么这个集合就会和所有有这个元素的点连边。我们把集合当成一个点,那么当两个集合同时选择一个$x$,$x$连集合$A$,集合$B$连$x$,$A-B$,即最后要搞一个最大生成树即可。
CF1408F Two Different
模拟时,显然$2^n$的长度暴力模拟,就会全部变成一个。然后对剩下的贪心分配。
但是直接正做一遍,反做一遍就好了。(我是傻逼)
CF1422F Boring Queries
在线区间$lcm$
解1
对于小于等$\sqrt{2\cdot 10^5}$的质因子,直接各开一个线段树暴力维护,需要动态以及常数优化
对于大于 $\sqrt{2\cdot 10^5}$
的质因子,每个元素至多有一个。这有点像维护区间不同颜色个数,$\sum [last_x<l]$只不过每个颜色还带了权值(强制在线)版本$r$这个线段树维护的是点$x$,维护的是$last[t]=x$,的$t$的所有乘积。
解2
根据解$1$去做预处理第 $i$版本的线段树时,将 $i$ 位置的权值乘上 $a_i$的大质因子,为了防止二次计算,并将$a_i$上次出现的位置除掉该质因子。
- 版本$r$这个线段树维护的是位置$x$,在$[1,r]$上的乘积。
CF1437G - Death DBMS
$AC$自动机上树链剖分最大值,或者标记永久化线段树维护子树点的最大值。
CF1436F. Sum Over Subsets
用$jiangly$的话说看到$\gcd=1$,一定想到莫比乌斯容斥这种东西。
然后想想没有限制咋做。
- $a_i\times a_i$产生贡献。选择一个$(k-1)$是被踢掉的,然后随便选$2^{k-2}$
- $a_i\times a_j$产生贡献。(是有顺序的那种),$2^{k-3}(k-2)[a_i,a_j\in A]+^{k-3}(k-2)[a_j\in A,a_i\in B]$。
维护一下两个乘积的$\sum$即可。
CF1443F - Identify the Operations
先考虑如何处理不合法的情况。每次删观察是否两边都是不需要的数。
正解其实很简单,观察拿出某个数之后,此时这个数就成了不必要的数。如果下次想拿被移走的数,其实间接在拿$pos_{b_i}$,并且一定拿的到,然后模拟一下就没了。
CF1443E - Long Permutation
大水题,逆康托展开得维护后$14$个数就好了。
- 提醒我要准备他两板子了。两者都可以做到$n\log n$。
CF19D
这题告诉我们线段树上区间二分时间复杂度不大。
CF204E Little Elephant and Strings
锁定字符串的每个$r$,就可以知道这个后缀是否存在$k$个重复。
然后标记下,某个结点可以贡献的就是结点到根最大有标记的$len$,瞎几把维护即可。
CF793C Mice problem
阴间题。
我们只要把每一个老鼠在矩形里的时间段算出来然后取交集,若交集非空则输出交集中的任意点即可。
但是有很多恶心的点。
- 出现与边的线段一样的直线,永远不能交在矩阵内。
- 如果最后交集在一个时间点,也永远不能在矩阵内。
- 如果有不动点要特殊判断。
CF1285E Delete a Segment
你要求出 正好删去一条线段后,并集 最多包括多少条线段。
如果不删,就把所有线段排个序加入,然后判如果加入的左端点小于当前最大右端点则,出现了一个新的线段。考虑$dp[i][r][2]$显然空间不够,但是发现删一条边,对枚举到一个点的$r$产生$2$个状态。直接暴力$map$保持即可。
考虑计算去掉每条线段的贡献,显然如果出现$[[\ ],[\ ]]$这种情况这条线段的贡献是+2的,推广到一般形式,如果在括号匹配中遇到$set$里只有一个括号$[$显然去掉我是可以让之后的括号与之前括号分离。但是要记住加入一个括号他自己这个并集也会消失,然后用$set$维护即可(主要$set$好删除)
CF1451E Bitwise Queries
其实就是探究如何在$4$次询问找到$a,b,c$
首先记住$a+b=a\oplus b+2(a\&b)$
观察题目都是$[0,2^n)$。
假设有重复那就很简单。
如果没有重复
可以白票一个询问,一定存在$a_i \oplus a_j=2^n$,并且此时$a_i \& a_j=2^n$
或者直接确定根据异或1的和异或2的推导出即可。
CF1452E Two Editorials
二维差分细节题,只是场上摸鱼了。这里只是告诉自己别摸鱼
CF1158B The minimal unique substring
打表得到的,循环$(n-k)/2$个$1$+$0$,即可。
考虑$110110110$此时每加循环$k=k+1$,设$x$个1
CF1158C Permutation recovery
考虑最简单$val_{nxt[i]}>i,i>j, j\in[i+1,nxt[i]-1]$
连好边,有线段树优化一下边,就可以拓扑排序,就做完了。
CF1251E2 Voting (Hard Version)
很巧妙的贪心,从跟随大贪心去考虑,如果发现我就算把后面全部选完,还不能免费跟随,就需要从剩下里选最小的,保证后面都选完就可以免费跟随了。
CF1283F DIY Garland
可以知道叶子结点,根结点,以及每个点的出度。从小的选,一定选叶子结点里面最小的那个结点,这里注意当点的出度为$0$,才能放入堆里,。仔细思考想想即可。
CF1461F Mathematical Expression
大力分类讨论。
只需要处理$*+$
用$0$分开每一段。
此时就有个$n^2$的$dp$。首先去头尾$1$,一定是$+$,如果我一段之间的乘积是$K$,如果用$1$分开,最坏就是$2+K/2+n>K$,$K>2n$用$1$分开就没有意义了。考虑到此时非$1$的有$\log n$个。
对于$dp$
- $a[i]=1$,一定选择$+$。
- $a[i]\not ={1}$,需要选择乘法区间转移即可$dp[i]=\max{dp[j]+\prod_{t=j+1}^ia[t]}$。
拿个数组记录过程即可复杂度$O(n\log n)$
CF1462F The Treasure of The Segments
求的是删除最少的线段使存在一条线段能够和其他所有线段均重合
对于每条线段求一遍即可,统计一下跟他不重合的就行了。
CF1463E Plan of Lectures
一直在想咋判不正确。显然需要输出方案,直接缩点拓扑排序,为了防止缩点里面又不合法的,我们直接在原图上再连边去拓扑排序,看是否可以实现。
CF1464B Grime Zoo
如果$1$,$0$的数量定了,$01+10$已经定了。
那我要让$10$更多,坑定是把$1$往前放,获得更多$10$,反之也是。
所以只需要瞎几把预处理即可。枚举前缀都是$0$,后缀都是$1$的情况。
CF1464C Poman Numbers
打表,贪心。
洛谷
P4103 [HEOI2014]大工程
记录下最长边,最小边,次小边,次大边即可,虚树模版题。
P5504 [JSOI2011]柠檬
一番证明就可以发现最优的两端一定是相同数,如果左右端点贝壳大小不相等的话,必然有一个端点对答案没有贡献。干嘛不直接分开呢?
上凸包维护对于每个$a_i$。然后斜率优化即可单调栈(PS:好像没啥麻烦的,甚至直接二分上凸包也可以)。
P2542 [AHOI2005] 航线规划
LCT维护边权,简单多了。如果连接成环,就把这些全部变成$0$.这些就不会是关键路径。
Atcoder
AtCoder Grand Contest 048
ACL Beginner Contest
F - Heights and Pairs
容斥是显然的。$f(i)$表示保证$i$对相同的答案。$g(i)$表示随便选$i$人成对的数量。$z(i)$表示选$i$对情侣的方法。
对于每种$h_i$我们可以计算出选出$i$对的方法,变成多项式就是$(k_0x^0+k_1x_1+k_2x^2…)$,启发式$NTT$即可。
$g(i)=g(i-2)\times C_{i-2}^2/(i/2)$
$f(i)=g(2n-2i)z(i)$
$ans=f(0)-f(1)+f(2)-f(3)…$
当然想要想的更快,二项式反演就不用思考了。(显然我要复习下)
牛客
ICPC小米邀请赛2
A.2020
赛时没做,考虑二分,先安排前$k$个再安排后$k$个,就没了。
I.Subsequence Pair
脑子进水题,想到$lcs$然后,问马老师:说不需要$LCS$。
其实就是$lcs$裸题。
- $\max(dp_{i,j}+m-j)$,公共一样直接贪心染$t$取最长。
- $\max(dp_{i-1,j-1}+m-j-1+n-j-1)$,如果发现$s_i<t_j$,发现取完之后就随便取了。