杂题记录及简要题解(三)

以下是大概 5 月初开始做的一些题。以前的简要题解都是骗人的。这次真的是简要题解了(大雾

相对之前改良了一下题目名称的格式。

2017 计蒜之道 初赛 - 腾讯狼人杀

二分答案 \(x\) 后原问题变为检验是否存在选取方案 \((V, E)(|V| = k)\) 使得 \(\sum_\limits{e \in E} w_e - xk \cdot (2n- k)\)。式子可以写成 \(\sum_\limits{e \in E} w_e + \frac{k(k - 1)}{2} \cdot 2x - (2n - 1) \cdot xk\),每个点代价设为 \((2n - 1) \cdot x\),每条边边权加上 \(2x\) 之后直接做最大权闭合子图即可。

THUPC 2018 - Citing

将矩阵转化为线性序列后相当于是要做匹配,可以直接用 FFT。

集训队作业 2018 - 复读机

  • \(d = 1\):答案为 \(k^n\)。
  • \(d = 2\):使用生成函数来表示,答案为 \(n![x^n]\left(\sum_\limits{i = 0}^n [d | i] \frac{x^i}{i!}\right)^k\),化简后是求 \(\frac{n!}{2^k} [x^n](e^x + e^{-x})^k\),二项式定理展开后直接 \(O(k)\) 算就可以了。
  • \(d = 3\):还是套用上面的生成函数的式子。使用单位根反演,二项式定理展开后最终是要求 \(\frac{n!}{3^k} [x^n] \sum_\limits{i = 0}^k\binom{k}{i} \sum_\limits{j = 0}^{k - i} \binom{k - i}{j} e^{(i + \omega_3j +\omega_3^{2}(k - i - j))x}\),直接 \(O(k^2)\) 算即可。

ZJOI 2019 - Minimax 搜索

根节点权值改变必然只会变成 \(W + 1\) 或 \(W - 1\),且若变成 \(W + 1\),则只会修改权值 \(< W\) 的点;若变成 \(W - 1\),则只会修改权值 \(> W\) 的点(修改 \(W\) 本身除外)。

为了方便,我们计算使用能量至多为 \(k\) 时的方案数,这样恰好为 \(k\) 的答案可以通过差分得到。可以对两部分的点的贡献分别做 dp。为了防止出现重复,使用补集转化后改为算两部分点中修改后根节点权值不变的方案数。注意到使用能量上限每增加 \(1\),最多只会有两个叶子结点会新产生贡献,于是做动态 dp 就可以了。需要注意一些细节的讨论。

ZJOI 2019 - 语言

树上差分之后用线段树合并来维护树链的并,就可以算单个点的答案。总答案为所有点的答案和除以 \(2\)。

ZJOI 2019 - 浙江省选

\(m = 1\) 相当于做一次这个题

\(m > 1\) 时就做多次,做第 \(k\) 次就相当于求出所有答案为 \(k\) 的直线。单次具体的做法为求出所有剩下直线构成的凸壳,然后用所有答案为 \(1 \sim k - 1\) 的直线对凸壳做区间覆盖,那么一条凸壳上的直线答案为 \(k\) 当且仅当这条直线上存在一个部分被覆盖的次数为 \(k - 1\)。可以二分找每一条答案为 \(1 \sim k - 1\) 的直线在凸壳上的覆盖区间,然后离线做一次扫描线。

HNOI 2019 - 白兔之舞

使用单位根反演。那么对于 \(t\),答案为 \(\frac{1}{k} \sum_\limits{j = 0}^{k - 1} \omega_k^{-jt}\left(\omega_{k}^jA + I\right)^L\)。其中 \(A\) 为给定的 \(n \times n\) 的边数矩阵。

后面的东西可以用矩阵快速幂先求出来。之后把前面的 \(\omega_k^{-jt}\) 化为 \(\omega_k^{\binom{j}{2} + \binom{t}{2} - \binom{j + t}{2}}\) 就可以做卷积了。

JSOI 2019 - 精准预测

2-SAT + bitset。每个点直接存整幅图的 bitset 会导致空间不够,可以分成多次做。

JSOI 2019 - 神经网络

假设 \(m\) 棵树分别被拆成了 \(a_1, a_2, \cdots , a_m\) 条链,那么答案即为每棵树拆分的方案数\(\times\)将这些链排列成环使得没有两条相邻的链来自同一棵树的方案数。

对于单棵 \(k\) 个结点的树,拆成 \(1 \sim k\) 条链的方案数可以在 \(O(k^2)\) 的时间内用 dp 算出。注意算每棵树拆分的方案数时,每有一条长度大于 \(1\) 的链还应乘以系数 \(2\),因为链长度大于 \(1\) 时,可以选择从链的两端中任意一端进入。

剩余的部分用生成函数做。可以用容斥减掉同一棵树上的链相邻的方案数。把同一棵树上相邻的链看做整体后,本质上是对所有链做可重集排列,因此单棵树的生成函数为 \(\sum_\limits{i = 1}^k i! f_i \sum_\limits{j = 0}^{i}(-1)^{j} \binom{i - 1}{j} \frac{x^{i - j}}{(i - j)!}\),其中 \(f_i\) 为该棵树拆成 \(i\) 条链的方案数。先不考虑把所有链排成环,只考虑排成序列。记所有树的生成函数的卷积为 \(G(x)\),那么答案为 \(\sum_\limits{i = 1}^{+\infty} i![x^i]G(x)\)。排成环的话只需要强制使得一棵树包含某个结点的链为序列的第一条链,特殊处理一下这棵树的生成函数即可。

JSOI 2019 - 节日庆典

对于一个前缀,可能作为答案的位置只有 \(O(\log n)\) 个。可以直接维护所有位置的集合,然后暴力枚举最优答案。在做最优答案的比较时,发现形式一定是某个后缀与整个串求 lcp,所以可以用 exkmp。

TJOI 2019 - 唱、跳、rap 和篮球

答案为 \(\sum_\limits{i = 0}^{\left\lfloor\frac{n}{4}\right\rfloor} (-1)^i \binom{n - 3i}{i} \times (n - 4i)! [x^{n - 4i}]\left(\sum_\limits{j = 0}^{a - i} \frac{x^j}{j!}\right)\left(\sum_\limits{j = 0}^{b - i} \frac{x^j}{j!}\right)\left(\sum_\limits{j = 0}^{c - i} \frac{x^j}{j!}\right)\left(\sum_\limits{j = 0}^{d - i} \frac{x^j}{j!}\right)\)。

TJOI 2019 - 甲苯先生和大中锋的字符串

建后缀自动机然后差分。

CEOI 2017 - One-Way Streets

缩完边双后模拟。

CEOI 2017 - Sure Bet

枚举两边选取的总数,然后三分。

CEOI 2017 - Mousetrap

将 \(t\) 点设为根。显然老鼠最终被卡在了一个点后,将这个点到根的路径上的所有支路都堵住最优。可以做一次 dp 预处理出老鼠从每个点出发,被卡在子树内的某个点,最终到 \(t\) 的最小操作次数。

问题是老鼠在最开始可能会往上走。不好直接做,可以二分答案然后从 \(m\) 点暴力往上跳,把支路中不合法的点堵住,判断总操作次数是否足够即可。

CEOI 2017 - Building Bridges

斜率优化 + 分治。

CEOI 2017 - Palindromic Partitions

根据 border 的性质可以证明贪心是对的。

CEOI 2017 - Chase

记 \(s_i\) 表示所有和 \(i\) 相邻的点的 \(F\) 之和。假设选定的一条链为 \(\{a_1, a_2, \cdots , a_k\}\),那么缩掉点 \(a_1\) 的收益为 \(s_{a_1}\),缩掉任意 \(a_i(i > 1)\) 的收益为 \(s_{a_i} - F_{a_{i - 1}}\)。问题的本质还是求最长链,可以直接做树形 dp。

APIO 2016 - Gap

  • \(T = 1\):从两边往中间逼近即可求出整个序列。
  • \(T = 2\):将 \([a_1, a_N]\) 分成尽量相等的 \(n - 1\) 部分,那么差分值最大的两个数必然不会位于同一部分,可以顺次扫所有区间并记录答案。

IOI 2016 - molecules

若有解,可以证明一定存在一种解是排序后的一段连续区间。直接双指针扫一下即可,也可以二分。

IOI 2016 - railroad

可以将速度值看做结点来建图,对于每一段路 \((s_i, t_i)\),从 \(s_i\) 向 \(t_i\) 连边,再连接一条从 \(+\infty\) 到 \(1\) 的边。现在可以额外加一些从 \(x\) 到 \(x + 1\) 代价为 \(0\) 的边,或者从 \(x + 1\) 到 \(x\) 的代价为 \(1\) 的边。那么问题即为用最少的代价使整幅图构成欧拉回路。

欧拉回路满足经过每一段 \((x, x + 1)\) 的方向向右的边与方向向左的边数量相同,于是可以差分求最小代价。注意这样可能会使一些差分值为 \(0\) 的部分没有边,导致图不连通,所以最后还要做一次最小生成树。

原文地址:https://www.cnblogs.com/ImagineC/p/10802848.html

时间: 2024-10-10 07:36:16

杂题记录及简要题解(三)的相关文章

noip做题记录+挑战一句话题解?

2017 小凯的疑惑 傻逼数论题,打表猜结论就好 比较有追求的可以搞下之前专题分享里面叶佬港数论的时候提到的一个,什么来着忘了QAQ 数论证明待落实 时间复杂度 真 傻逼模拟题 耐心做下就成,注意细节,好像没辽 这道题是真滴恶心,除了逼着本压行选手硬生生打出了156行代码以外没有任何意义:) 逛公园 还没有落实,题目还没看呢QAQ 奶酪 开始看到的时候并没有思路啊感觉,看到了一个并查集的标签但是没有想到?就上去硬艹了个,算是贪心的玩意儿,,,就AC了,,,是数据太水了??? 不管怎么说并查集的解

【刷题记录】杂题记录

1.[bzoj 4552][Tjoi2016&Heoi2016]排序 题意:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序.排序分为两种:(0,l,r)表示将区间[l,r]的数字升序排序:(1,l,r)表示将区间[l,r]的数字降序排序.最后询问第q位置上的数字. 分析:二分答案,将所有值小于等于当前值的数赋为0,其余赋为1.利用线段树可以通过统计区间内数字1的个数来使当前区间有序.进行m次局部排序后可以得到答案与当前值的大小关系,满足可二分性. 1 #include<cstd

《信奥一本通》提高版—简要题解

<信奥一本通>提高版-简要题解 贪心 活动安排: 按右端点排序,因为越早结束越好. 然后从1扫到n,每次比较当前位置线段的左端点是否大于上一个选的线段的右端点.如果大于,那么ans++,将上一个选的线段的右端点更新为当前线段的右端点:如果小于,那什么都不用做.因为选上一条一定比选当前这一条更优(结束时间更早). 种树 按右端点排序,对于每个区间的需求,从右端往左端扫,只要没种到树的就种,ans++. 因为要使前面的需求尽量与后面的需求重叠,从而使树的数量最少 喷水装置 观察+画图发现对于一个圆

JXOI2018简要题解

JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法描述大致如下: 假设我们要对一个大小为 \(n\) 的数列 \(a\) 排序. 等概率随机生成一个大小为 \(n\) 的排列 \(p\) . 构造一个大小为 \(n\) 的数列 \(b\) 满足 \(b_i=a_{p_i}\) ,检查 \(b\) 是否有序,如果 \(b\) 已经有序了就结束算法,并

BJOI2018简要题解

BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生成了一个长为 \(n\) 的二进制串,希望你对于这个二进制串的一个子区间,能求出其有多少位置不同的连续子串,满足在重新排列后(可包含前导 \(0\))是一个 \(3\) 的倍数.两个位置不同的子区间指开始位置不同或结束位置不同. 由于他想尝试尽量多的情况,他有时会修改串中的一个位置,并且会进行多次询

DP刷题记录

目录 dp刷题记录 codeforces 706C codeforces 940E BZOJ3997 POJ2279 GYM102082B GYM102082D codeforces132C L3-020 至多删三个字符 牛客 553C Chino with Queue POJ3260 The Fewest Coins Codeforces 372C dp刷题记录 codeforces 706C 题意:给出n个字符串,可以对每个字符串进行翻转操作, 每个操作对应一个消耗c[i],问经过操作后是否

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

动态规划刷题记录1(不定期更新~)

Dp刷(chao)题记录&题(fu)解(zhi) 1.bzoj1055 [HAOI2008]玩具取名 题目大意:字典中有四个字母,’w’\’i’\’n’\’g’,给出每个字母的转换关系,即某个单个字母可以转换为两个字母.给出一个文本,求最初的可能文本(刚开始有且仅有一个字母). 题解:明显是一道区间dp嘛~.设状态为文本[i,j]内的字母可以转化为字母[k],即f(i,j,k),要解状态的可能性.转移思路,自然是枚举i到j内的断点,再枚举关系.那么初始的状态转移方程就是 f[i][j][k]=f

【最小生成树杂题】

这里谈一下最小生成树 生成树的概念:连通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树.生成树是连通图的极小连通子图.所谓极小是指:若在树中任意增加一条边,则将出现一个回路:若去掉一条边,将会使之变成非连通图. 生成树各边的权值总和称为生成树的权.权最小的生成树称为最小生成树. 最小生成树一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.常用于求最小生成树得算法包括kruskal(克鲁斯卡尔)算法或Prim(