05 2024 档案

摘要:思路 不难发现,对于一个 lv>2lv>2lv>2 的树而言,左右儿子是 lv−2lv-2lv−2 的,中间儿子是 lv−1lv-1lv−1 的,这里就放一个 lv=4lv=4lv=4 的图(手绘,不喜勿喷 qwq): 然后每隔三层,就会在根节点形成一个与子树的爪不重合的爪,所以状态转移方程如下: 阅读全文
posted @ 2024-05-30 15:40 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 根据等差数列求和公式,1+3+5+⋯+(2n−1)=(2n−1+1)×n2=n2,2+4+6+⋯+2n=(2n+2)×n2=n×(n+1)1+3+5+\dots+(2n-1)=\frac{(2n-1+1)\times n}2=n^2,2+4+6+\dots+2n=\frac{(2n+2)\ti 阅读全文
posted @ 2024-05-30 14:06 sz_jinzikai 阅读(8) 评论(0) 推荐(0) 编辑
摘要:思路 对矩阵进行 (i+j) mod 3(i+j)\bmod3(i+j)mod3 编号,只要改变其中一种颜色的所有 X 棋子就不会出现连续 333 个行列同色。 记得选最小的,最小的那个肯定 ≤⌊k3⌋\le\lfloor\frac k3\rfloor≤⌊3k​⌋。 代码 # include <bi 阅读全文
posted @ 2024-05-29 13:27 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:提示 正难则反,可以总数减去无交集的部分; iii 与 jjj 无交集的条件是 rj<lir_j<l_irj​<li​ 或 lj>ril_j>r_ilj​>ri​ 二分是个好东西。 思路 上面基本已经说了大致思路。我们设 l,rl,rl,r 为原数组,L,RL,RL,R 也是原数组,但是单独排序了。 阅读全文
posted @ 2024-05-26 16:22 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 首先 aia_iai​ 是第 ⌊ai−1n⌋\lfloor\frac{a_i-1}{n}\rfloor⌊nai​−1​⌋ 行第 (ai−1) mod n(a_i-1)\bmod n(ai​−1)modn 列的(此处均为 000 开始),然后每次添加点肯定不用整个都判断,只需要判断更改的部分即可 阅读全文
posted @ 2024-05-26 16:13 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 按照题目说的做就行。 对于每一个新进来的请求,先把完成时间比任务开始时间靠前的任务从队列里弹掉,然后判断队列里任务个数是否 ≤ti\le t_i≤ti​(是 ≤\le≤ 不是 <<<,因为我们已经把正在工作的任务也放在队列里了),如果是,那就把结束时间累加上 did_idi​ 并塞进队列。注意 阅读全文
posted @ 2024-05-24 15:35 sz_jinzikai 阅读(0) 评论(0) 推荐(0) 编辑
摘要:思路 首先这题要用最短路是显然的,但是边权不固定(但对 dijkstra 过程没影响,因为边权没有负数)。在做 dijkstra 的时候,我们的边权取决于不固定的当前高度和固定的增长高度,然后类似 P1516 用 exgcd 把边权算出来松弛即可。 注意事项 请及时取模,否则在乘法和 exgcd 时 阅读全文
posted @ 2024-05-22 13:18 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 若 aia_iai​ 的与结果中第 iii 位是 111,则必须每个 aia_iai​ 的第 iii 位都是 111。然后我们只需要从高位开始枚举 iii,如果次数足够那就操作,否则就不操作。 代码 # include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2024-05-20 16:07 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 aaa 名志愿者,每名 111 份,共 aaa 份;bbb 支单挑队,每支 111 份,共 bbb 份;ccc 支双打队,每支 222 份,共 2c2c2c 份;ddd 支三人队,每支 333 份,共 3d3d3d 份。总共 a+b+2c+3da+b+2c+3da+b+2c+3d 份。 代码 阅读全文
posted @ 2024-05-20 10:08 sz_jinzikai 阅读(0) 评论(0) 推荐(0) 编辑
摘要:思路 首先考虑朴素 dfs。若 A 必胜,则说明至少有一种情况能使得 B 必败;若 A 必败,则说明无论他取什么(或者不取),B 都必胜。 当然,那样会 TLE:例如当 A 取了 a,ba,ba,b 后 B 取了 c,dc,dc,d 与 A 取了 c,dc,dc,d 后 B 取 a,ba,ba,b 阅读全文
posted @ 2024-05-19 20:21 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 我们可以先以 ccc 为第一关键字从小到大排序,aaa 为第二关键字从小到大排序,此时我们就只要删去 ai<aja_i<a_jai​<aj​ 且 i<ji<ji<j 的元素即可,剩下的数下标从小到大排序输出就行。 代码 # include <bits/stdc++.h> using names 阅读全文
posted @ 2024-05-19 16:11 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:dfs 练手题。 思路 我们可以把每一辆车上的目前总重量记录下来,然后对于每一只猫枚举每一辆车,要么蹭上一辆车继续 dfs,要么自己新开一辆车 dfs。也可以再加一个最优性剪枝(即如果当前车数大于已知最优解就直接结束)。我这里还用了一个从大到小排序的优化,因为越小的越容易蹭车,不用开新车嘛。 代码 阅读全文
posted @ 2024-05-19 13:59 sz_jinzikai 阅读(6) 评论(0) 推荐(0) 编辑
摘要:提速偷懒小技巧 使用 bitset 自带的位运算配上 01 背包,真是又快速又省代码长度! 思路 首先设 s=∑ais=\sum a_is=∑ai​,若 s mod 2=1s\bmod2=1smod2=1,显然最开始就是好的,不用删;否则可以先用 01 背包判断是否存在子序列之和为 s2\frac 阅读全文
posted @ 2024-05-17 19:49 sz_jinzikai 阅读(7) 评论(0) 推荐(0) 编辑
摘要:思路 字典树板子题。如果你不会字典树,请右转其它题解。 我们用 tri,jtr_{i,j}tri,j​ 表示从 iii 号节点转移过来且以字母 jjj 结尾的节点编号,si,js_{i,j}si,j​ 表示这种前缀字符串(从 iii 号节点转移过来且以字母 jjj 结尾)的个数,我们不管前缀有多长, 阅读全文
posted @ 2024-05-16 19:49 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 首先我们设 sis_isi​ 是 aia_iai​ 的位数,则 f(ai,aj)=ai×10sj+ajf(a_i,a_j)=a_i\times10^{s_j}+a_jf(ai​,aj​)=ai​×10sj​+aj​。首先先看放在地位的情况,aia_iai​ 会被放在低位 i−1i-1i−1 次 阅读全文
posted @ 2024-05-16 19:38 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 题目中有一点对本题而言非常重要:mod=108,ai<108mod=10^8,a_i<10^8mod=108,ai​<108,所以 ai<moda_i<modai​<mod,这也就说明 ai+aj<2×moda_i+a_j<2\times modai​+aj​<2×mod。首先只有当 ai+a 阅读全文
posted @ 2024-05-16 19:16 sz_jinzikai 阅读(4) 评论(0) 推荐(0) 编辑
摘要:思路 首先按照位置从小到大排序。 设 dpi,jdp_{i,j}dpi,j​ 表示对于前 iii 个弹珠,最后一个停止的弹珠。当 j<ij<ij<i 时,那么 iii 号弹珠要滚到 jjj 号弹珠的位置,耗费 xi−xjx_i-x_jxi​−xj​,dpi,j=dpi−1,j+xi−xjdp_{i, 阅读全文
posted @ 2024-05-15 14:57 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 设 x=a×g,y=b×gx=a\times g,y=b\times gx=a×g,y=b×g,其中 ggg 为一个质数。根据 gcd⁡\gcdgcd 的性质我们可以知道,gcd⁡(x,y)=g×gcd⁡(a,b)\gcd(x,y)=g\times\gcd(a,b)gcd(x,y)=g×gcd 阅读全文
posted @ 2024-05-07 16:55 sz_jinzikai 阅读(5) 评论(0) 推荐(0) 编辑
摘要:思路 s0is0_is0i​ 表示第 iii 列中 . 的个数(此处不是 #,因为全改成 # 需要修改 . 的个数的代价),s1is1_is1i​ 表示第 iii 列中 # 的个数,dpi,j,kdp_{i,j,k}dpi,j,k​ 表示最后一列是第 iii 列且最后一列选了 kkk,已经连续相同了 阅读全文
posted @ 2024-05-07 15:24 sz_jinzikai 阅读(6) 评论(0) 推荐(0) 编辑
摘要:思路 我们设 dpi,jdp_{i,j}dpi,j​ 表示翻转 ai∼aja_i\sim a_jai​∼aj​ 后和增加了几。ai,ai+1,ai+2,…,aj−2,aj−1,aja_i,a_{i+1},a_{i+2},\dots,a_{j-2},a_{j-1},a_jai​,ai+1​,ai+2​ 阅读全文
posted @ 2024-05-07 15:08 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 首先显然不能 O(∑m2)O(\sum m^2)O(∑m2) 暴力建边求最小生成树,要考虑更快的方法。让我们来回顾一下 kruskal 的实现过程: 先把所有边排序; 再按边权从小到大进行并查集,逐渐合并每个连通块,直到合并成一个块。 这个思路在这题中仍然可行。因为每个子集的所有边权是相同的, 阅读全文
posted @ 2024-05-06 15:54 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 蒟蒻不会平衡树,只能使用单调队列力。 先用 mpimp_impi​ 表示数字 iii 在原数组中的位置,然后像滑动窗口一样,q1q_1q1​ 维护这 kkk 个数字内位置最靠前的数,q2q_2q2​ 维护位置最靠后的数,然后两个数减一减就是距离,取 min⁡\minmin 即可。 代码 # i 阅读全文
posted @ 2024-05-06 15:44 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 这是本人遇到的最简单 ABC-C。 nnn 个巨人叠罗汉,其实就是所有巨人的肩膀高度加最上面的头高度,即 ∑ai+bn−an\sum a_i+b_n-a_n∑ai​+bn​−an​,要使高度最大,就选择头最长的巨人在最上面,即 ∑ai+max⁡(bi−ai)\sum a_i+\max(b_i- 阅读全文
posted @ 2024-05-06 15:34 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:倒数第一分钟提交成功,同时带我在 CF 的第 555 场比赛中上青,留念。 思路 异或的性质: x⊕x=0x\oplus x=0x⊕x=0; a⊕b=b⊕aa\oplus b=b\oplus aa⊕b=b⊕a; 若 x⊕y=zx\oplus y=zx⊕y=z,则 y⊕z=x,x⊕z=yy\oplus 阅读全文
posted @ 2024-05-04 17:41 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 赛时始终百思不得其解,赛后看了他人代码恍然大悟。 先看一下我画的 n=5n=5n=5 时的做法(x 表示选择的点): xx... ..... ..x.. ...x. ....x 首先距离为 000 是一定存在的,然后距离为 111 就在第一行,222 在 ai,i,ai+1,i+1(3≤i<n 阅读全文
posted @ 2024-05-04 17:21 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 首先他们两人都一定是移动一段时间后永远停在某个位置上分,不可能是转了一圈回到起点(因为他不如留在那个最大分数的点),所以我们只要沿着 pip_ipi​ 跑一圈遍历,选择最终得分最大的那个店就好了,另一个人同理。另外注意可能出现跑不满一圈的情况,那跑到第 kkk 个点就退出循环。 代码 # in 阅读全文
posted @ 2024-05-04 17:11 sz_jinzikai 阅读(4) 评论(0) 推荐(0) 编辑
摘要:思路 首先 a1a_1a1​ 只要比 x1x_1x1​ 大就行,例如 114514114514114514 就一定合法(因为 xi≤500x_i\le500xi​≤500)。后面的 aia_iai​ 不仅要满足 ai>xia_i>x_iai​>xi​,还要满足 ai mod ai−1=xi−1a_i 阅读全文
posted @ 2024-05-03 21:59 sz_jinzikai 阅读(4) 评论(0) 推荐(0) 编辑
摘要:思路 首先很显然,如果 a1∼aia_1\sim a_ia1​∼ai​ 是 bbb 的子序列,那 a1∼ai−1a_1\sim a_{i-1}a1​∼ai−1​ 肯定也是 bbb 的子序列,所以我们可以贪心枚举 iii,直到不满足条件的就退出循环。但也不需要对每个 iii 都单独做一遍判断,我们用变 阅读全文
posted @ 2024-05-03 21:49 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 我们可以把问题转化一下:设每辆地铁都有一个固定车站 xxx,若想在 yyy 车站上车,就相当于是走过了一条 y→x,w=1y\to x,w=1y→x,w=1 的边,若想在 yyy 车站下车,就相当于走过一条 x→y,w=0x\to y,w=0x→y,w=0 的边。然后跑一遍最短路就好了,因为边 阅读全文
posted @ 2024-05-01 18:13 sz_jinzikai 阅读(6) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示