随笔分类 -  题解

摘要:一篇 python 题解。 先看第一问。一个数 x 的位数,相当于 log10​x+1。用我们小学二年级就学过的换底公式,可以得到: log10​2P+1=log10​2log2​2P​+1=log10​2P​+1 再看第二问,要我们求出 2Pmod10500 的值。python 中的 pow 函数 阅读全文
posted @ 2025-06-06 19:33 MrPython 阅读(7) 评论(0) 推荐(0)
摘要:什么你说你智商不够注意不到特殊性质?其实这是道模拟题。我要让所有人都知道惊为天人的模拟做法! 由于要求字典序最小,贪心地做肯定是对的。奇数位的数只能移动到奇数位,偶数位的数只能移动到偶数位(这个总能注意到吧),因此对于每个数我们可以从所有奇数位 / 偶数位中挑一个最小的,然后尝试交换过来。 一但确定 阅读全文
posted @ 2025-05-15 15:40 MrPython 阅读(9) 评论(0) 推荐(0)
摘要:注意:全文左闭右开。 Hint 0: CF 的数据结构题难度自动 -500。 Hint 1: 若干个需求可能被同时满足的充分必要条件是什么?对于单次询问,如何暴力回答? 将所有没有内鬼的区间并起来,记作 S,那么 S 中的任意一个人都是船员。倘若存在一个有内鬼的区间是 S 的子集,便出现了冲突。 我 阅读全文
posted @ 2025-04-26 00:42 MrPython 阅读(9) 评论(0) 推荐(0)
摘要:把问题倒过来做,就变成了: 初始时有 0 点 hp,每轮会恢复一点 hp。同时每轮使用一次技能,消耗 k+1 点 hp 来获得当前轮所对应的快乐值。你最多可以获得多少快乐值? 然后就是经典反悔贪心板子。每轮尝试使用技能,若 hp 不够就撤销掉所有用过的技能快乐值最少的那次。 #include <cs 阅读全文
posted @ 2025-04-21 23:03 MrPython 阅读(4) 评论(0) 推荐(0)
摘要:无敌 brute force。注意到 log2​1017 约为 56,1+2+3+4+5+6+7+8+9+10=55,11+12+13+14+15=65,大胆猜测仅需要 15 以内的数就够了。使用复杂度为 O(3n) 的子集枚举算法枚举所有分配的方案,足以填满整个数组。对于每次询问枚举要右移多少位, 阅读全文
posted @ 2025-03-18 16:16 MrPython 阅读(6) 评论(0) 推荐(0)
摘要:这个绝对比 E 简单。 对于 k=0,是经典的逆序对板子,直接做。 然后考虑 k 增加 1 后如何更新答案。在所有数的相对关系中,只有最大的数变成了最小的,其他的都没有变化。因此,将最大的数删除掉,并作为最小的数重新插入回去即可。 线段树可以维护这个过程。使用 vector 套 vector 以数字 阅读全文
posted @ 2025-03-13 18:33 MrPython 阅读(4) 评论(0) 推荐(0)
摘要:我们先考虑 O(n2) 做法。按照 t 从小到大排序后,依次满足每个箱子的目标需求。若箱子移动的路线被其他箱子阻挡,此箱子会推着阻挡物前进。在此期间,任何一个箱子无法在规定时间内达到目标,将输出 No,否则为 Yes。 按照上述过程进行模拟,处理每个箱子时,若发现其前面 / 后面的箱子阻挡了其行进路 阅读全文
posted @ 2025-03-02 19:03 MrPython 阅读(7) 评论(0) 推荐(0)
摘要:你说的对,但是我会分块。 对于每个区块,我们维护以下信息: 原始数组 dat; 一个指针数组 sorted,指向原始数组里的每一个元素,按照指向的值升序排序; 当前区块的偏移量 delta(进行区间加时使用); 一个指向 sorted 中元素的指针 ptr,表示第一个大于 minx 的元素(相当于存 阅读全文
posted @ 2025-01-26 16:06 MrPython 阅读(5) 评论(0) 推荐(0)
摘要:Brute force 启动! 首先,显而易见的是按二进制每一位进行拆分,接下来就是在 01 矩阵上操作。 定义一回合为:先扫描每一行,再扫描每一列,若该行/列有需要操作的就对整行/列进行操作。我们可以大胆猜测:若存在解,每次操作应该能固定一行与一列,因此最多会进行 min(n,m)+O(1) 次操 阅读全文
posted @ 2024-12-27 13:01 MrPython 阅读(5) 评论(0) 推荐(0)
摘要:神秘小分讨。输在了不知道二分应不应该 +1 上。 本文 0 index,左闭右开。方便起见,我们将题目描述改为:每次询问那个 1 是否在询问区间中,倘若询问区间长度大于等于 k 则回答者会撒谎。 我们假设有 k<2n​。第一次,我们询问区间 [0,2n​),那这一次他会撒谎,询问结果为 true 则 阅读全文
posted @ 2024-12-22 16:25 MrPython 阅读(6) 评论(0) 推荐(0)
摘要:以下内容从 0 开始标号。 一股浓烈的 ABC 味扑面而来。类似最小化 kx+y 的形式已经在 ABC 的 F 题中欧出现好多次了。 我们不关心最终答案里具体进行了多少次旋转操作,状态仅需设置 fi,j​ 表示当前位于第 i 行第 j 列的最小代价。 我们以行为单位进行转移。对于单独的一行,我们需要 阅读全文
posted @ 2024-12-22 16:05 MrPython 阅读(9) 评论(0) 推荐(0)
摘要:非常典型的 codeforces 小注意力题。 首先,我们发现当排列为 1 到 n 的正序数列时,S 可以取到最大值。此时,S(p)=1×n+2×(n−1)+3×(n−2)⋯+n×1。这是因为区间 [1,1],[1,2],[1,3],…[1,n] 的最小值为 1,共 n 个,区间 [2,2],[2, 阅读全文
posted @ 2024-12-17 16:30 MrPython 阅读(7) 评论(0) 推荐(0)
摘要:感觉这种题就是很套路的玩意,但是想了好久,还是做题做少了。 从贪心的角度考虑,假设我钦定了要选某个数,我该选哪一个呢?显然选择靠前的肯定不会比靠后的更劣。我们当然要选所有能选的数中最靠前的两个。 使用状压 dp,设 fS​ 表示已经选择过的数字集合为 S 时最靠后的已选数位置。我们先预处理出每个数出 阅读全文
posted @ 2024-11-23 07:31 MrPython 阅读(4) 评论(0) 推荐(0)
摘要:题目本身没啥意思,就是维护个矩阵区间乘法,上个线段树做完了。 我更想说说这个标题是啥意思。 半群说的是一个集合 S 和一种二元运算 ∘。若运算 ∘ 满足以下条件: ∘ 具有封闭性,即 ∀x,y∈S,x∘y∈S ∘ 满足结合律,即 ∀x,y,z∈S,(x∘y)∘z=x∘(y∘z) 则称 ⟨S,∘⟩ 为 阅读全文
posted @ 2024-11-20 23:09 MrPython 阅读(5) 评论(0) 推荐(0)
摘要:怎么搞的,为什么好多大佬都在这里爆炸了? 对于 b>0,其最终效果一定是将所有不小于 n 的数变成在 0 到 n−1 中没有出现的数。应用乌姆·尼克算法二分找到有多少个数小于 n,剩下的数都要操作各一遍。 b=0 需要稍微处理一下: c≥n 时,初始数组内的所有数都大于等于 n,需要各操作一遍,共 阅读全文
posted @ 2024-11-11 18:51 MrPython 阅读(7) 评论(0) 推荐(0)
摘要:本题两种情况分类讨论。设有 x<y<z。 当 x⊕y⊕z=0 时,1 到 x−1 的所有数都是 0。我们可以二分出第一个 i 使得 ask(1,i)=0,x 即为 i。询问次数为 log2​n。 当 x⊕y⊕z=0 时,直接二分就不好使了。不过仔细分析一些例子可以发现:一定可以找到一个 p,满足 阅读全文
posted @ 2024-11-08 20:45 MrPython 阅读(8) 评论(0) 推荐(0)
摘要:这个题还真挺不错的,值得补出来! 我们可以钦定任意一点的颜色(取值为 [0,k)),然后沿着边的方向对其他点染色。具体地,第设 u 个点的颜色为 cu​,且有一条边 u→v,则 cv​=(cu​+1)modk。这个图上的所有环长度都是 k 的倍数,因此一定可以按照上述规则对该图染色。 一个图有且仅有 阅读全文
posted @ 2024-11-07 17:03 MrPython 阅读(5) 评论(0) 推荐(0)
摘要:赛时做不出来一点,赛后补不出来一点,丢给某个小朋友被一下子秒了,赶紧退役吧。 通过惊人的注意力,我们发现:操作 第(i+2)modn,(i+4)modn,(i+6)modn,…,(i−3)modn,(i−1)modn 项各一次,其结果为第 i 和 (i+1)modn 项分别增加 1、而其余位置分别增 阅读全文
posted @ 2024-11-06 07:31 MrPython 阅读(10) 评论(0) 推荐(0)
摘要:这题放普及组 t4 刚刚好。 O(n2k) 的做法相信大家都能做出来,这里就不讲了。 一个数的因数个数肯定不会太多。查阅经典表格发现 106 范围内因数最多的数,其因子只有 240 个。 若两个数相乘后是否能被 h 整除,只和这个两个数与 h 的 gcd 有关,而与 h 互质的部分不会发挥作用,对后 阅读全文
posted @ 2024-10-23 09:10 MrPython 阅读(5) 评论(0) 推荐(0)
摘要:还记得如何比较两个数的大小吗?在两个数数位长度都相同的情况下,从高位开始依次比较。题目中数据的值域为 [0,260),我们比较最多约 60 次即可得知答案。 我们依次考虑 V 二进制前缀的若干位。 开 60 个并查集。对于长度为 i 后缀,我们将其最后一位强制赋上 1,记这个值为 s。 然后,倘若当 阅读全文
posted @ 2024-10-19 01:20 MrPython 阅读(6) 评论(0) 推荐(0)