04 2024 档案

摘要:思路 对于每个 min⁡\minmin 合并,肯定会有一些较大数受到浪费,例如把 4,54,54,5 进行 min⁡\minmin 合并,得数是 444,这里就浪费了 5−4=15-4=15−4=1。我们设 dpxdp_xdpx​ 表示以 xxx 为根的子树里最少得浪费,然后从 n∼1n\sim1n 阅读全文
posted @ 2024-04-30 19:29 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 既然这题没有环,又要用到所有的边,这不就是一条链嘛!直接找到任意一个度为 111 的点作为起点后 dfs 一次,因为是一条链,所以 dfs 途中只要不走回头路就一定是一次就找到答案,时间复杂度 O(n)O(n)O(n)。 代码 # include <bits/stdc++.h> typedef 阅读全文
posted @ 2024-04-29 15:16 sz_jinzikai 阅读(7) 评论(0) 推荐(0) 编辑
摘要:思路 我们手搓一个数据:111011111011111011。 第一个前缀:111。没什么好说,只有 20=12^0=120=1 种情况。 第二个前缀:111111。这时在中间可以填 000 或 111,出现 21=22^1=221=2 种情况。 第三个前缀:111111111。这时它们之间还是可以 阅读全文
posted @ 2024-04-27 15:44 sz_jinzikai 阅读(7) 评论(0) 推荐(0) 编辑
摘要:思路 因为最后求的是绝对值,所以我首先使计算过程中 aaa 始终比 bbb 大。 设 aia_iai​ 表示 aaa 的二进制第 iii 位上的数字,bib_ibi​ 表示 bbb 的二进制第 iii 位上的数字,若 ai=bia_i=b_iai​=bi​,则 xxx 包不包含 2i2^i2i 都无 阅读全文
posted @ 2024-04-27 15:32 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 如果一只蜗牛在第 nnn 天爬到了顶,说明它在 n−1n-1n−1 天还没爬到,也就是说这棵树的高度在 (n−2)(a−b)+a+1∼(n−1)(a−b)+a(n-2)(a-b)+a+1\sim(n-1)(a-b)+a(n−2)(a−b)+a+1∼(n−1)(a−b)+a 之间。然后更新当前上 阅读全文
posted @ 2024-04-26 19:38 sz_jinzikai 阅读(5) 评论(0) 推荐(0) 编辑
摘要:思路 对于每个 u,v(1≤u,v≤n)u,v(1\le u,v\le n)u,v(1≤u,v≤n),它们之间一定有一条边,可能在原图上,也可能在另一个平面。然后如果要构成三角形,这三点 a,b,ca,b,ca,b,c 必须互相连通,也相当于不能有 mpa,b+mpb,c+mpa,c≠3,0mp_{ 阅读全文
posted @ 2024-04-26 15:30 sz_jinzikai 阅读(14) 评论(0) 推荐(0) 编辑
摘要:个人认为 C>D。 思路 首先对于每个连通块,我们尽量让它们都变成完全图。然后判连通块可以用并查集,也可以用 BFS,本人用了并查集。注意最后要减去现有的 mmm 条边。 代码 # include <bits/stdc++.h> using namespace std; typedef long l 阅读全文
posted @ 2024-04-21 09:01 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 首先我们要把当前的猪分成两类——有性别和无性别。无性猪只能一猪一笼,有性别时最坏情况下是 ⌊s2⌋+1\lfloor\frac s2\rfloor+1⌊2s​⌋+1 个笼(没有有性猪时要特判)。需要的笼子就是它们之和。 代码 # include <bits/stdc++.h> typedef 阅读全文
posted @ 2024-04-20 15:27 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 这题我们可以枚举 i=n∼1i=n\sim1i=n∼1,均按 1∼n1\sim n1∼n 的排列填充第 iii 行和第 iii 列,最终可以填出类似这样的数组: 1 2 3 ... n 2 2 3 ... n 3 3 3 ... n . . . . . . n n n ... n 代码 # i 阅读全文
posted @ 2024-04-18 21:19 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 挺像某些排队接水的问题的。 首先肯定让询问次数越多的小球排在越前面,所以要从大到小排序再枚举。然后看看 aaa 和 bbb 中哪个排队时间短就去那一堆。 代码 # include <bits/stdc++.h> using namespace std; typedef long long ll 阅读全文
posted @ 2024-04-08 15:26 sz_jinzikai 阅读(5) 评论(0) 推荐(0) 编辑
摘要:思路 优先队列 BFS。首先肯定对于每个位置,能量值越大越优,优先队列中按照当前能量值从大到小排序,然后只要比当前最优解更优时可以入队,最后如果到了终点就结束了。 另一种解法 因为可以重复进队,所以用普通队列也行。但是普通队列会导致重复进队次数太多辣,所以虽然优先队列有 log⁡\loglog,但普 阅读全文
posted @ 2024-04-07 15:14 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 fjf_{j}fj​ 表示对于所有 ci=jc_i=jci​=j,其中最小的 aia_iai​。然后这题就变成了 max⁡fi\max f_imaxfi​。因为 cic_ici​ 大,所以可以用 map 存哦! 代码 # include <bits/stdc++.h> using namesp 阅读全文
posted @ 2024-04-07 15:02 sz_jinzikai 阅读(0) 评论(0) 推荐(0) 编辑
摘要:思路 本体核心:不能进位。 那就好做了,把每一位拆分分别计算,然后用组合数学中的插板法就行辣。 插板法不懂可以 bdfs。 代码 # include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <in 阅读全文
posted @ 2024-04-05 20:27 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:思路 求最小的最大,显然是二分题。然后判断函数只需要从根节点递归,如果当前节点数 ≥mid\ge mid≥mid 了,那就删掉它与父亲节点的边,并累加一下计数器。如果删边数量已经够多了,那么只要看剩下的整棵树的节点数是否也 ≥mid\ge mid≥mid 就行啦。 代码 # include <bit 阅读全文
posted @ 2024-04-03 12:56 sz_jinzikai 阅读(6) 评论(0) 推荐(0) 编辑
摘要:思路 首先就拿样例二 123451234512345 来看吧。万位没啥好说,肯定只要转 111 次。千位,从 12345→0234512345\to0234512345→02345 需要转 1×10=101\times10=101×10=10 次,再加上 02345→0034502345\to003 阅读全文
posted @ 2024-04-03 12:51 sz_jinzikai 阅读(2) 评论(0) 推荐(0) 编辑
摘要:纪念一下蒟蒻第一次不看题解独立 AC 单调队列优化 dp。 思路 这题其实和 P1725 琪露诺很类似,这题的 dpidp_idpi​ 可以从 dpi−d−1∼dpi−1dp_{i-d-1}\sim dp_{i-1}dpi−d−1​∼dpi−1​ 转移过来,然后当然选最小的,所以 dpi=ai+1+ 阅读全文
posted @ 2024-04-02 21:00 sz_jinzikai 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 很明显 sss 越接近 2u+12\frac{2u+1}222u+1​ 答案越大,于是我们可以定义一个前缀和数组 aaa,然后二分找到最后一个 ≤2u+12\le\frac{2u+1}2≤22u+1​ 的数和第一个 ≥2u+12\ge\frac{2u+1}2≥22u+1​ 的数,比较一下两个数 阅读全文
posted @ 2024-04-01 13:49 sz_jinzikai 阅读(1) 评论(0) 推荐(0) 编辑
摘要:思路 首先每个数可以不变或变成任意一个 ≤⌈n2⌉\le\lceil\frac n2\rceil≤⌈2n​⌉ 的数,显然不可以对于 n≤mn\le mn≤m,⌈n2⌉\lceil\frac n2\rceil⌈2n​⌉ 不可能比 ⌈m2⌉\lceil\frac m2\rceil⌈2m​⌉ 大,所以我们 阅读全文
posted @ 2024-04-01 13:29 sz_jinzikai 阅读(5) 评论(0) 推荐(0) 编辑

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