摘要:
A 题目大意 输入一个字符串,把这个字符串的最后一位改成 4 后输出这个字符串。 解题思路 直接模拟即可 AC 代码 #include<iostream> #include<math.h> #include<time.h> #include<stdio.h> #include<algorithm> 阅读全文
摘要:
解题思路 一种不需要树形 dp 的做法。 因为是一颗无根树,所以我们不妨以重心为根。 首先考虑边权最少的情况。可以发现这个时候对于任意两个叶子节点,我们可以分别考虑其到根节点的路径,这样对于求其路径的异或值是没有影响的,但是在这种情况下我们可以很方便的讨论其路径的奇偶性。令 表 阅读全文
摘要:
解题思路 显然,有以下两种选择的方法: 所有边一样长; 两条一样长的边,第三条边小于这两条边。 然后组合数计算即可。 AC 代码 #include<stdio.h> #include<stdlib.h> #include<algorithm> #include <vector> #define ll 阅读全文
摘要:
解题思路 贪心,能走距离最短的城市就一定走。 分别考虑 和 的情况,两种情况分别是从后向前转移和从前往后转移,分别预处理一个前缀和和后缀和即可。 AC 代码 #include<stdio.h> #include<stdlib.h> #include <valarray 阅读全文
摘要:
解题思路 因为可以有空集,那么我们首先构造第一段最长的连续上升的序列,那么这段序列中共有 个上升子序列。接下来我们考虑补全剩余的,我们不妨将剩余的部分全部设为连续不增序列,那么设当前位置在第一段中有 个小于它的,那么添加这个数后可以增加 \(2^{ 阅读全文
摘要:
解题思路 一个比较显然的结论: 若序列中存在一段连续的长度大于 的区间,且区间中的数均为 ,那么一定可以将整个序列转化为 。 进一步的,我们可以推出,若序列中有一段区间的中位数为 ,那么这个序列一定可以全部转化为 。 最后特判 和序 阅读全文
摘要:
解题思路 其实是很简单的一道题,考虑计算出所有 在减去每一个 后所有可能的值,将这个值按照从小到大的顺序排序,那么我们可以考虑固定最小值,查找最大值,这个时候从最小值到最大值的区间内应该每一种 都出现了一次。那么,我们可以使用一个桶或者 map 搭配双 阅读全文
摘要:
解题思路 简单贪心题,我们可以把整个序列看作 个可重集,首先可以得到一个显然的结论:较大的数一定比较小的数先放入一个集合中。同样,由于每一轮 ,其中 表示第 个集合的元素和,那么,我们一定会将当前的 阅读全文
摘要:
解题思路 观察可以发现,每次操作后序列元素之和不变,那么我们可以将每一次操作看作是 向 移动了 。由此可得,若序列和 ,那么一定无解,否则一定存在一个合法的操作方案。 因为每次移动时移动的数应为 \(i 阅读全文
摘要:
解题思路 与其考虑删除哪些点,不如考虑保留哪些点。考虑到和异或有关,那么我们可以把这些数倒序插入 trie 树中,然后我们就可以在 trie 树上跑一个简单的 dp: 若当前节点为叶子节点,那么保留,返回 ; 若当前节点在链上,那么直接继承儿子节点; 若当前节点有两个儿子,那么更新为较大儿 阅读全文