随笔分类 - 题解
摘要:三个矩形之间的相对位置可以用这两种情况概括,其他的所有情况都可以由原矩阵旋转而得: 在此之前,我们先将 bx,y=∑i=xx+k∑j=yy+kai,j (x≤n−k+1,y≤m−k+1) 用二维前缀和预处理出来。时间复杂度 O(nm)。 先来看求第一种情况。先预处理求任意两行之间的最大值(d
阅读全文
摘要:什么搞笑比赛,会 F 不会 DE。 贪就可以。 深搜到某个节点枚举它接的边时,如果自己没有点亮就激活这条边,总点亮的灯泡数增加 2。如果所有边都遍历了自己还是灭着的,就激活一次和父亲连的边,点亮自己熄灭父亲。由于父亲计入自己时一定点亮自己了,因此父亲必定是亮着的状态,因此点亮的灯泡数量不会变化。对每
阅读全文
摘要:集体降智题。放普及组 t3 正合适。 根本不用字符串科技,也不用多想,? 只是卡掉哈希做法的。把思路画出来就一眼了: zaabaabz|zaabaabz |zaabaabz |zaabaabz |zaabaabz |zaabaabz zaabaabz| zaabaabz| zaabaabz| zaa
阅读全文
摘要:会 G 不会 F 是不是没救了 Rudolf sorts the complexities of the problems in ascending order and finds the largest value of ai−ai−1(i>1). What is the minimum va
阅读全文
摘要:同:[ARC061E] すぬけ君の地下鉄旅行。水两篇题解真香 想一下,生活中我们是怎样乘坐地铁的? 从站厅层刷卡进站; 前往站台层乘车; 下车后从站台层走到站厅层; 从站厅层刷卡出站,此时闸机会自动从卡中扣除相应费用。 我们将乘坐一轮地铁看作花费 1 元(换乘必须先付费出站),使总花费最小。这个问题
阅读全文
摘要:想一下,生活中我们是怎样乘坐地铁的? 从站厅层刷卡进站; 前往站台层乘车; 下车后从站台层走到站厅层; 从站厅层刷卡出站,此时闸机会自动从卡中扣除相应费用。 在本题中,我们模仿上述过程,每个车站都分成至少两个节点——一个站厅层和若干个站台层。从站台层前往站厅层(出站)需要支付 1 元费用,而从站厅层
阅读全文
摘要:可以发现,在极限情况(k=2)时,所有可能作为日期的 k 的自然数次幂也不会超过 64 个。 我们对于每个月都枚举一遍所有的 kp(p∈N),判断其字符串长度是否比表示月份的字符串长度小、前缀是否为月份、去掉表示月的部分(即应该表示日的部分)数值是否小于该月天数以及有无前导 0。 本题涉及字符串与整
阅读全文
摘要:来个愉快的扫描线。 我们先按照题意,把不合法的情况画到平面直角坐标系上: 所有合法的情况都不应该出现在该直线上。另外,题目保证 ui<vi,所以所有的合法点都应该出现在直线 y=x 上方。 所有的合法的点出现的地方可以分成 6 个部分。我们进行 3 次扫描线: 沿 x 正方向,处理每个点 ➀➁➂
阅读全文
摘要:分块好闪,拜谢分块! 我们需要支持三种操作: 单点修改 查询区间最/次大值 查询区间内元素出现的数量 对于每个块,我们用数组存下数据,记录这个块的最大和次大值,再用一个 unordered_map 存下块中某个数出现的次数。 单点修改时,同步操作 unordered_map 的数据,再重新计算整个块
阅读全文
摘要:注意:本题解的点编号从 0 开始。 作为一个最短路题还是很有意思的。 这道题难点在于让时光倒流,考虑从 N−1 出发往各个点走。反向建图,之后就可以用 dijkstra 算法做。 具体一些,先将 f 初始化为 −∞,再将 f(N−1) 初始化为 +∞ (显然从自己到自己无论多晚走都可以)。 再考虑假
阅读全文
摘要:在我的代码中,下标一般从 0 开始,大部分函数/类的方法最寻左闭右开原则。 我们维护一个布尔数组 f,fi 表示 Si 与 Si−1 是否相等,相等为 1,不相等为 0。至于 f 的首项,他对答案不会产生影响,设置成什么都无所谓。 对于操作二,显然 S 中区间 [L+1,R] 元素全部与它前面
阅读全文
摘要:好一个 DP 套 DP!这里必须要锐评一下题面太抽象读题都花我 20 min 从一个点 p 删除一个棋子后,你可以选择与他直接相连的一些点放上棋子,不过要求被选择点权值的和小于 p 的权值 wp。显然,如果想要选择 p 的某个相邻点 q,一定有 wp>wq (单个点的权值都超了肯定没法选)。凭
阅读全文
摘要:趣味贪心题。 本题要把数字反转或拼接起来,而且没有对数字的计算操作,则可以从字符串的角度考虑本题。判断游戏最后剩下的数字 ≥10m,就是看游戏最后剩下的字符串的长度 ∣S∣>m。 Anna 应该可以做点什么,让字符串变短。她选择了一个数字反转之后,会丢掉前导零,此时字符串可能会变短一些(例如 158
阅读全文
摘要:这个题还算挺套路的。 我的思路如下: tarjan 找到所有非割边 按照这些边重新建图 在这些边中找到权值最小的边 以这条边的一个端点为起点,另一个为终点,跑 bfs 找环 相信各位大佬还有更好的思路,但是我这应该是不太需要脑子的 #include<bits/extc++.h> using name
阅读全文
摘要:ABC 没题出了吗……全是大典 用邻接矩阵存下图 跑一遍 floyd 求出任意两点间的距离 同 P1433 吃奶酪。 吐槽结束,还是具体说说状压怎么做吧。 设计状态:F(i,j) 表示当前在 j 点,状态为 i 时代价的最小值。其中状态用二进制压位,第 p 个二进制位为 1 表示已经访问过 p 点,
阅读全文
摘要:阅前注意:本文下标均从 0 开始,代码通常遵循“左闭右开”规则。 题意简述 在圆上有 N 条弦(不会共用一个端点),判断是否有任意两条弦相交。 思路简析 圆上问题不好想,不如转换成 OIer 们喜闻乐见的序列问题。将圆从 2N−1 号点与 0 号点间断开,拉直,让它变成区间问题。 例如: 可以转化成
阅读全文
摘要:这篇题解使用了数学方法,O(n) 解决本题。 思路 首先,容易发现操作一最多进行一次,之后的操作一均可用若干操作二等价代替。具体证明请参考 官方题解,这里不再赘述。 在本题解中,下标从 0 开始,且所有的 i 都保证 i 为整数且 0≤i<n。 让我们重点关注 a 数组的变化过程中的 2 次——对
阅读全文
摘要:一道紫色的大水题。 正解线段树维护哈希值,但是对于不会的人来说,暴力也可行! 具体地,STL 大法。使用 vector<char> 存储原数组(string 也可以)。对于操作 1,直接用 std::fill 进行区间赋值;对于操作 2,用 std::equal 判断 2 个区间是否相等。 操作 1
阅读全文
摘要:先考虑如果每个冰淇淋球不相同时的情况数。设有 m 种不同的冰淇淋球,显然有:方案数 n=2m(m−1)。 现在已知 n,直接求解这个关于 m 的方程的正数解,即 m=28n+1+1。 但是在大部分情况下,这个式子并不能得到一个正整数解。也就是说,冰激凌球会有重复的。想一想如何知道要有几个重复的
阅读全文
摘要:题意简述 有一个长度为 n 数组 a。将 a 中的元素两两求最小值,打乱后得到长度为 2n(n−1) 的数组 b。 现在已知 b,求原数组 a。保证有解,构造任意一组解即可。 思路 假设将 a 排序然后开始构造 b。a0 是数组中最小的,因此显然可以得到 对于每一个整数 i(1≤i≤n) 都有
阅读全文