02 2025 档案
摘要:..C 限时每日一题day6。好久没有复习树的重心了,导致很显然的思路没有想出来。 官解中的两个思路都想到了个大概,但最后都没得到进展,还是有待提高思维的qwq... 解法1:注意到每一步合并必然是度数为1的结点向其邻点合并,否则整个图中 权值非0 的联通块会多于一个,显然最终不能合并到一起。(这一
阅读全文
摘要:..E1 限时每日一题day5。第二次成功,这次是一道个人认为很简单的 \(dp\),刚开始往组合计数方面想了导致浪费了些时间,应该能做得再快一点的。 可以发现第 \(i\) 天的方案与前 \(i-1\) 天的决策是没有任何关系的,数据范围又很小,因此很可以 \(dp\)。 设 \(dp[i][j]
阅读全文
摘要:edu163 C 限时每日一题day4。又一次失败了、、 这题是一道经验题,总结一下 “从中间分成一半,前后相同的字符串” 的性质: 若要找某个字符串的所有子串中上述类型字符串的最长长度,可以做到 \(O(n^{2})\)(暴力是 \(O(n^{3})\)):先枚举长度,对固定长度的所有子串采用滑动
阅读全文
摘要:985 C 限时每日一题day3。这次没做出来,看完题解后感觉自己是sb。 二分答案 或者 \(dp\),参考官方题解。 tutorial code_二分 code_DP
阅读全文
摘要:prrblem 有个常规套路:每次选取一个后缀的物品,就可以保证选择的物品数量单调不降。因此将物品价值作后缀和处理,每次选取一个后缀的物品。 要满足“选取时间单调不降”的性质,可以对 \(t\) 数组这样处理:将所有时间取后缀最小值,得到一个单调不降的序列。按照这个序列与按照原序列选是等价的。 采用
阅读全文
摘要:949 C 限时每日一题day2。这一次做出来了,但时间花得有点多,再接再厉吧。 一个不难的构造题。 首先能发现 以任意两个非 \(-1\) 的相邻两数为端点 形成区间的答案 与 其他位置的答案 是独立的,因此问题转化为给定两个正数 \(x,y\),中间夹着若干个 \(-1\),能否正确填充。 将数
阅读全文
摘要:G 树状数组 + 树上启发式合并 考虑计算所有点作为 \(z\) 时的贡献,最后加和。 相当于所有包含 \(z\) 的路径 \((x,y)\),其中满足:\(w_{x}=w_{y}\) 且 \(w_{z}>w_{x}\),设现在要计算点 \(u\) 作为 \(z\) 的答案:将整个树分成 以 \(u
阅读全文
摘要:1001 E1 限时每日一题day1。出师不利,脑袋糊涂了,没想出来这道题。 看完题解才发现这道题无比 \(eazy\)。。。 很明显每个人要删的点 \(u\) 必须满足这个性质: \[max_{v \in T - subtree(u)}w[v] > w[u] \]那需要找哪个 \(u\) 以确保一
阅读全文
摘要:D 三分 & 反悔贪心 计算最大匹配数很简单,难点在于计算每种匹配数情况贡献的最大值。 贪心地想也能发现,对于每个集合,若固定选择线段的个数 \(cnt\),最大贡献为: \[\sum_{i=1}^{cnt}a[n + 1 - i] - a[i] \]这个可以用前缀和预处理出来,以做到对于某个给定匹
阅读全文
摘要:A \(b[i]=1\) -> \(a[i-1]=a[i]=a[i+1]\) \(b[i]=0\) -> \(a[i-1]!=a[i]\space or \space a[i+1]!=a[i]\) 显然让某个 \(b[i]=1\) 不成立很难。考虑让某个 \(b[i]=0\) 不成立。则当 \(b\
阅读全文
摘要:对于背包问题求方案数与具体方案,我想分为两种题型: 恰好型问题—— \(n\) 个数,每个 \(a_{i}\) 满足一定范围(为定值,或取值范围是一个区间等),且\(a_{1} + a_{2} + ... + a_{n}=k\) 的 \((a_{1}, a_{2},...,a_{n})\) 个数,以
阅读全文
摘要:A 每次将当前 \(s\) 中以最左侧的连续一段 \(1\) 开头的后缀移动到 \(t\),在 \(t\) 中留下这段 \(1\),将剩下的后缀再移回 \(s\),循环模拟即可。 code B 容易发现分数一定不会增加,只能尽可能保持不变。而题中还要在在分数最大情况下最小化数组长度,可以发现:只能删
阅读全文
摘要:A 期望计算 + 推公式 首先,由期望的线性性可知和式的期望等于和式中每一项的期望之和。因此求\(\sum_{i=2}^{n}|a[i-1]-a[i]|\)的期望,等价于求每一个\(|a[i-1]-a[i]|\)的期望,再求和。所以问题转化为求\(|a[i-1]-a[i]|\)的期望,其中\(a[i
阅读全文
摘要:E 可以发现,对于某个 \(a[i]\),答案只可能是 \(a[i]\) 的约数,设其为 \(x\)。反过来想一下,若 \(x\) 能成为 \(k\) 个数的 \(gcd\),则这 \(k\) 个数都是 \(a[i]\) 的倍数。因此,\(a[i]\) 的约数 \(x\) 可以在原数组中挑出 \(k
阅读全文
摘要:E 比较有意思的思维题 按下标可以分为若干个组,先对每组内升序排序,再按值排序,一定是最优的。目前还不太会证明,以后有机会再补充证明,具体细节见代码。 code F 双指针 + 模运算式推导 首先特判掉 \(x=0\) 的情况,因为只有不含0的数组才符合要求,所以只需要将所有 \(a[i]=0\)
阅读全文
摘要:H 贡献法 考虑计算01串中每一位对答案的贡献并求和: 由于每个连续段的贡献只有1,故可设定一个连续段的贡献是由这个连续段的第一个数字造成的。那么计算某一位的贡献,就只需要让这个数字成为某个连续段的开头即可。 具体地,假设计算第\(i\)位且\(s[i]=0\)。要计算这一位对答案的贡献,则要让这一
阅读全文
摘要:一般这种题都涉及到概率。对于这种类型题目,直接用递归式表示状态来进行状态间的转移,并在计算过程中记忆化即可。若在转移式两侧出现了相同的状态,直接移项即可。 牛客周赛80 G ABC 350 E
阅读全文
摘要:题目链接:problem 大致意思就是给定一个0~9字符串,计算所有结尾非0,且能被结尾数字整除的子串个数。 很容易想到能dp,但是如何推导是一个难点。具体需要利用到模运算式子来推导。 直接参照灵神题解:editoral 注意单独一个非0数字也合法,在每一个位置的转移前要赋上初值。
阅读全文
摘要:多项式乘法可以用\(O(n^{2})\)逐项得到,但不高效。而FFT可以用\(O(nlogn)\)快速计算 利用FFT来解决算法题的例子: ABC392 G 要找给定数组中满足\(A + C = 2B\)的升序三元组\((A,B,C)\)的数量,可以通过构造多项式的方式巧妙计算: 设\(a=[1,2
阅读全文
摘要:问题:给定\(a1,a2,...,an\),对于每个\(i\in [1,n]\),求出从\(i\)左侧开始数 第一个和第二个 元素值\(>a[i]\)的位置 只求第一个,可以用单调栈来做。但要得到第\(k\)个,应该怎么做呢? 将数组按顺序构建双向链表 先将原数组按值排序,排序时要记录每个元素原来的
阅读全文
摘要:期望定义式 \[E(X)=\sum_{i}X_{i}*P(X=X_{i}) \]期望的线性性 线性指的是加法和数乘。 和式的期望等于和式中所有项的期望之和,即: \[E(X+Y)=E(X)+E(Y) \]\[E(\sum_{i=1}^{n}X_{i})=\sum_{i=1}^{n}E(X_{i})
阅读全文
摘要:A \(exgcd\) \(exgcd(a,b,x,y)\):\(a,b\)已知,用于求解\(ax + by = gcd(a,b)\)中的某一组解 \(x,y\);而求\(ax + by = k * gcd(a,b)\) 的解,只需要将 \(exgcd(a,b,x,y)\) 求出的\(x,y\) 同
阅读全文
摘要:第一场区域赛,惨遭打铁。赛时只出了BCI。赛后补了DG,发现两道题都没有那么难,只能说还得加训。。。 \(C,I\)相对简单一些,就不写题解了。 code_C B 补得最难绷的一题。先写了一个栈维护\(dfs\)路径的写法,\(TLE15\);又写了一个\(set\)维护结点之间访问关系的写法,\(
阅读全文
摘要:赛时\(8\)题(实际上是\(7\)题,有道题数据水而被\(fst\)了...) E 这道题赛时做出来了,但看题解时看到了一个值得学习的重要结论。 结论:要将一个数组中的所有数变为相同的数\(x\),操作为加\(1\)或减\(1\),那么最小代价 \(<->\) \(x\)是中位数。 (若不知道这个
阅读全文
摘要:官解:editoral C 构造 基于\(D\)题的结论,设钦定子串的最左侧字符为\(A\),最右侧字符为\(B\):只要该子串左侧含有\(A\),或者最右侧字符含有\(B\),那么该子串便合法,只需要找到最长的子串即可。 还可以进一步发现:这个最长子串一定是原字符串的某个前缀或者后缀。否则,一定可
阅读全文
摘要:题目链接:problem \(f[i][j]\): 将\(str[i]\)变为字符\(j\),将\(str[i到n]\)变为合法字符串,需要的最小操作次数。 \(nxt[i][j]\):将\(str[i]\)变为字符\(j\)的所有方案中,最优方案转移过来的字符。其中: \(nxt[i][j]==j
阅读全文
摘要:import pandas as pd file = "summerOly_athletes.xlsx" # read_csv用于.csv文件 # read_excel用于.xlsx文件 df = pd.read_excel(file, header=0) # header:从第几行开始读取(下标从
阅读全文
摘要:C 感觉还是不熟练与拆位相关的题目,补了半天才补出来。 问某个区间内符合某种性质的数的个数,很容易想到用前缀和思想转化,则问题转化为快速求出在\([1,x]\)中高位比其余位上数字都大的数字的个数。 设\(x\)共\(num\)位,最高位数字为\(d1\)。 可以分为\(4\)种情况考虑,每种情况都
阅读全文