• 二言不发


    有空再补“一言不发”吧,以前忘记写了,气死了

    https://www.luogu.com.cn/training/12

    CF627E Orchestra

    https://www.luogu.com.cn/problem/CF627E

    https://www.luogu.com.cn/blog/46396/solution-cf627e

    *CF639E Bear and Paradox

    https://www.luogu.com.cn/problem/CF639E

    CF639F Bear and Chemistry

    https://www.luogu.com.cn/problem/CF639F

    1. 建立边双,缩点
    2. 建立每个询问的虚树

    CF666D Chain Reaction

    https://www.luogu.com.cn/problem/CF666D

    一眼模拟,不知道为什么黑。

    CF666E Forensic Examination

    https://www.luogu.com.cn/problem/CF666E

    一眼融合怪题目。和你的名字很像(但是更简单)。

    建立广义 SAM。

    先通过倍增找到 \(S[pl,pr]\) 所在的后缀树节点,线段树合并,找到出现颜色最多的 \(T\) 就好。

    CF671D Roads in Yusland

    https://www.luogu.com.cn/problem/CF671D

    以下称给定的路径为“绳子”。

    这个问题很像背包/线段覆盖一样的问题,于是想到 dp。

    \(f_u\)\(u\) 这个点,覆盖它的所有子树和 \(u-fa(u)\) 边,的最小花费。

    那么有一个转移就类似于:(如果这些 \(f_v\) 没有一个覆盖到 \(u-fa(u)\),那么还要额外放一个绳子(记这个事件为 \(P\)))

    \[f_u=\sum f_v+[P]w_u \]

    会发现这个 dp 非常奇怪,而且也不是完整的。因为可能还有不是 \(u\) 的直接儿子 \(x\),也可以给 \(f_u\) 进行贡献( \(x\)\(x-fa(x)\) 对应的链延伸得很浅之类的)。

    所以我们用一个容器把所有 \(v\) 子树里面的绳子,都存到 \(v\) 里边。然后如果我需要用一条在 \(v_0\) 子树里面的绳子,权值为 \(w\),我就会有如下转移:

    \[\large f_u=\sum\limits_{v\ne v_0} f_v+w \]

    但是还有一个问题就是,如果这条绳子不超过 \(u\),那么就应该把它从容器里删除。

    这个容器就是可并堆,因为它需要合并/求最小值/整体减去一个 \(f_v\)/删除。

    整体减去一个 \(f_v\) 是因为:如果令 \(w'=w-f_v\) 那么就可以直接把 sigma 的下标限制去掉。

    对于后面两个操作,分别是:打懒标记/判断根节点是否非法(若绳子头深度大于等于 \(dep_u\) 则非法),再删除。

    最后答案,就是 1 的所有儿子的 \(f\) 之和。

    复杂度是 \(O(n\log n)\)

    *CF671E Organizing a Race

    https://www.luogu.com.cn/problem/CF671E

    CF643D Bearish Fanpages

    https://www.luogu.com.cn/problem/CF643D

    基环树?

    直接模拟即可,修改就是把原来的父亲的贡献减去,把新的父亲的贡献加上,以此类推。

    《新型大模拟》

    CF643F Bears and Juice

    https://www.luogu.com.cn/problem/CF643F

    注意:

    1. 其他的熊不知道今天熊喝的到底是哪些位置的桶。
    2. 一天可以每个熊都会喝桶。

    考虑信息论。(以前不太明白,现在不言而喻了~

    \[R_i=\sum\limits_{j=[0,\min(p,n-1)]}\binom n j i^j \]

    j 是枚举最终有多少个熊睡觉。

    binom 是枚举哪些熊睡觉。

    i^j 是枚举熊睡觉的时间。

    然后暴力计算就可以了。注意因为模数是 \(2^{32}\) 非质数,所以要枚举 binom 的分子分母进行约分。

    CF643G Choosing Ads

    https://www.luogu.com.cn/problem/CF643G

    原题。

    CF679E Bear and Bad Powers of \(\color {red} {\text{ Sutr}}\)

    https://www.luogu.com.cn/problem/CF679E

    如果没有操作二,那么就可以暴力做,因为总共每个数只会被操作 \(\log_{42}\) 次。

    有了操作二,发现区间都是一个数字,如果可以让一段相同数字都只操作一遍,那是极好的了!

    于是我们对于一个操作二(覆盖操作),将 \(r\) 设为要修改的值,而 \([l,r-1]\) 设为 -1。对于一个 -1,代表他要“向右看齐”,即他的实际的值为他右边第一个不是 -1 的数字。

    那么对于操作 3,只用将 \(l-1\)\(r\) 位置处理一下即可。

    找到这个右边第一个不是 -1,用 set 的 lower_bound 即可。因为我每次指挥增加一两个实际含义的位置,所以是对的。

    CF685C Optimal Point

    https://www.luogu.com.cn/problem/CF685C

    https://www.luogu.com.cn/blog/chen-zhe/solution-cf685c

    直接二分,然后乱推了。

    *CF696F ...Dary!

    https://www.luogu.com.cn/problem/CF696F

    CF698D Limak and Shooting Points

    https://www.luogu.com.cn/problem/CF698D

    一开始看数据范围这么小,于是想到枚举,后来发现不行,一看题解,原来还是枚举。。。

    \(p_{i,j}\) 为一个 vector 代表从 \(i\) 人射击到 \(j\) 怪,中间的怪物依次是什么。然后枚举 \(i\),枚举 \(j\)\(i\) 肯定是最后射击的,再枚举剩下人的射击顺序,看看能不能依次射掉 \(p_{i,j}\) 的怪物。时间复杂度 \(O(n*k!*k)\)

    CF700E Cool Slogans

    https://www.luogu.com.cn/problem/CF700E

    愚蠢的字符串题目

    首先 \(s_{k-1}\) 一定是 \(s_k\) 的后缀,因为如果不是可以删除后面的字符,显然不劣。

    \(f_u\) 为后缀树上 \(u\) 对应的节点,可以成为 \(s_k\) 的最大的 \(k\)

    我们设现在 \(X\)\(u\) 中出现了两次(也就是 \(u\)\(X\) 的子树中)

    \(u\) 对应的子串结束位置集合中,任意取一个位置 \(t\)

    \(u\) 肯定在 \(X\) 中出现一次,那么只要再找到一个在 \([t-len(u)+len(X),t-1]\) 的叶子节点就好了。在 \(X\) 节点上查询,这个显然可以用线段树合并做到。

    我们是从上往下更新 dp 值的。

    怎么确定更新 \(f_u\)\(X\)?同时记录一个最优 \(g_i\),代表最优的 \(X\),如果某一次更新有 \(f_{u'}=f_{X'}+1\),那么 \(g_{u'}=u'\),反之 \(g_{u'}=g_{X'}\)(一个串 \(A\) 以及他的子串 \(B\),如果 \(f_A=f_B\),那么肯定 \(B\) 不劣)。

    怎么取 \(t\)?任意一个 \(t\) 即可。因为 \(X\) 肯定是 \(u\) 的前缀,所以取到的肯定是较前的。比如 aba 那么 \(t=3\) 是必然的,对应到检索的是第一个 a,然后区间查询会查到第三个 a

    *CF704B Ant Man

    https://www.luogu.com.cn/problem/CF704B

    CF704C Black Widow

    https://www.luogu.com.cn/problem/CF704C

    https://www.luogu.com.cn/blog/xht37/solution-cf704c

    CF704D Captain America

    https://www.luogu.com.cn/problem/CF704D

    一眼网络流。然后不会。

    假设 \(r\le b\)

    首先套路:全部涂成红色。

    然后我们建立一排点代表横坐标,一排点代表纵坐标,然后对于一个点 \((x,y)\) 连边 \(x\to y:1\)

    对于一行的 \(d\) 的限制,如果这一行有 \(cnt\) 个点,则这一行涂红色个数为 \([(cnt-d)/2,(cnt+d)/2]\)(前上取整,后下取整)。对于一列类似。

    于是就从源点向横坐标的代表点连边,流量限制为上面所说的区间(没错是上下界)。纵坐标的代表点向汇点连边,同理。

    然后跑网络流即可。因为这是类二分图,所以它是 \(O(n\sqrt n)\) 的。

    CF704E Iron Man

    https://www.luogu.com.cn/problem/CF704E

    首先重链剖分。那么每个人的路线,可以划分为 \(\log\) 个重链上的链上移动。

    所以只用处理一个链上的问题。

    建立一个坐标系,横坐标就是链点,纵坐标是时间。那么把每个路线投影成一个线段,现在要求最早的线段相交时间。

    维护一个 set,比较方式为横坐标。然后按照时间依次插入线段/把线段删除。每次操作时,将操作线段的前驱后继处理一下,看看是否有交。

    因为在找到第一次有交的时间前,所有的线段都是互不相交的,也就是两两线段的相对顺序不变,所以这样是对的。

    CF708D Incorrect Flow

    https://www.luogu.com.cn/problem/CF708D

    https://www.luogu.com.cn/blog/PinkRabbit/solution-cf708d

    *CF708E Student's Camp

    https://www.luogu.com.cn/problem/CF708E

    居然是初二题……

    AGC020D Min Max Repetition

    https://www.luogu.com.cn/problem/AT3858

    https://www.luogu.com.cn/blog/master-040626/at3858-agc020d-min-max-repetition

    为什么最小连续长度 \(k\) 是那个东西?因为用小的去隔断大的,可以隔断成 \(m+1\) 段,所以是 \(n/(m+1)\)

    AGC020E Encoding Subsets

    <https://www.luogu.com.cn/problem/AT3859 >

    遇到“括号类”,“编码压缩类”,想到区间 dp。

    \(f_{l,r}\)\(l\sim r\) 的方案数,\(g_{l,r}\) 为把 \(l\sim r\) 压缩成一个括号的方案数。

    则有:

    \[f_{l,r}=\sum\limits_{i\in [l,r-1]} g_{l,i}*f_{i+1,r} \]

    为什么只用枚举 \(g\) 在左边的情况?因为 \(g\) 在右边的情况已经在 \(f_{i+1,r}\) 中枚举过了(归纳)。

    以及:

    \[g_{l,r}=\sum\limits_{d 是循环节} f_{l,l+d-1} \]

    然后记忆化搜索,不断递归就好。

    时间复杂度: \(T(n)=\sum\limits_{i\in [1,n]}\sum\limits_{d|n} (\ i+T(d)\ )\),反正能过。

    AGC020F Arcs on a Circle

    https://www.luogu.com.cn/problem/AT3860

    https://www.luogu.com.cn/blog/et2006/solution-at3860

    \(f_{i,j,S}\) 在圆周的第 \(i\) 个点,当前可以覆盖的最右位置为 \(j\),用了的线段集合为 \(S\)。(事实上,\(i\) 维可以滚掉)

    \[f_{i+1,j,S}+=f_{i,j,S} [i+1\le j]\\f_{i+1,\max (j,l_k),S|k}+=f_{i,j,S}\text{(加入第k条线段)} \]

    *AGC021E Ball Eat Chameleons

    https://www.luogu.com.cn/problem/AT3871

    又是初中题,我紫菜吧。

    *AGC021F Trinity

    https://www.luogu.com.cn/problem/AT3872

    *AGC022D Shopping

    https://www.luogu.com.cn/problem/AT3949

    先使得 \(t_i=t_i\bmod 2L\) ,然后定义两个 bool 值,\(l_i\) 代表搭乘从左边来的车子,能否当车子从右边来的时候坐进车;\(r_i\),从右边来的车子,能否当车子从左边来的时候坐进车。

    上界地说,购买一个超市需要 \(2L\) 时间(因为已经 \bmod 过 2L 了)。但是如果遇到一个 \(i<j\) 而且 \(r_i=1,l_j=1\) 的,那么就可以在 \(2L\) 时间内够完 \(i,j\) 两个超市(画图可知)。而其它情况(例如 \(r_i=1,l_j=0\))均不能省时间。

    于是做匹配即可。具体是,如果是一个 \(l\) 点,那么放进栈。如果是一个 \(r\) 点,那么弹栈。如果是一个 \(l\&r\) 点:如果栈为空,?突然不会.jpg

    AGC022E Median Replace

    https://www.luogu.com.cn/problem/AT3950

    https://www.luogu.com.cn/blog/ICANTAKIOI/solution-at3950

    *AGC022F Checkers

    https://www.luogu.com.cn/problem/AT3951

    AGC023D Go Home

    https://www.luogu.com.cn/problem/AT3955

    《亿万房间的大楼和亿万容量的班车。

    每一座大楼,都高耸而立,随心所欲地拨开云层,自由自在地穿过臭氧,漫不经心地在陨石间穿梭,直到生长到能撬动地球的长度。

    而中间的班车,也不甘示弱。宽能跨海,长能载江。结构纯粹,单一扩展,简洁结构,却运万物。

    然而,赛博的世界下,变味的地球中,班车上面的人们,却只是想着 Go Home。》

    https://www.luogu.com.cn/blog/wozaixuexi/solution-at3955

    *AGC023E Inversions

    https://www.luogu.com.cn/problem/AT3956

    AGC023F 01 on Tree

    https://www.luogu.com.cn/problem/AT3957

    最水紫题。

    考虑切掉一个点之后,它的所有子树是不会交错的,也就会形成[l1,r1][l2,r2][l3,r3] 的样子。于是如此,那便这样!

    AGC024D Isomorphism Freak

    https://www.luogu.com.cn/problem/AT3961

    为了达到颜色数最少,最终的树必定是以某一个点或某一个边为根,深度相同的所有点的子树同构,这样的答案是深度个颜色。

    然后对于第 i 层和第 i+1 层,要相乘一个 \(cnt_i*cnt_{i+1}\)

    比如第 100 层有 5 个节点,其中有 4 个是叶子节点,还有一个有 8 个儿子,在 101 层,且 8 个儿子权值叶子节点。那么为了补全,肯定要让 100 层的 4 个叶子,每个都多上 8 个儿子。所以是 5*100。

  • 相关阅读:
    keepalive高可用集群(nginx)
    nginx负载均衡
    linux-------lnmp安装
    nginx编译安装
    Django+MySQL安装配置详解(Linux)[更新为1.8.2版]
    linux性能监控——CPU、Memory、IO、Network
    linux 时钟时间,用户CPU时间,系统CPU时间 .
    指针用作传出参数时,需要二级指针
    僵尸进程&孤儿进程
    XHProf是一个分层PHP性能分析工具。
  • 原文地址:https://www.cnblogs.com/BlankAo/p/16303417.html
Copyright © 2020-2023  润新知