摘要: 看完题目后,发现直接对 \(a\) 模拟操作的情况过多,不好处理。但如果对 \(n\) 进行逆向操作,似乎可以在很少步数内就变为 \(1\)。我们大胆猜想,用最少的步数使 \(n\) 变为 \(1\),再考虑如何处理多余的次数(若次数不足则直接无解)。先列出转换后的操作: \(n\gets n + 阅读全文
posted @ 2024-01-20 18:18 liyilang2021 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 蒟蒻太菜了,看不懂图论的做法,就只好找规律了。 分析题目,可以得到一些信息:\(n\) 个不同的数最多能组成 \(\dfrac{n(n-1)}{2}\) 个不相同的无序二元组,而一个 $n \times n $ 的下三角形同行相邻的数对数量为 \(\dfrac{n(n-1)}{2}\),因此可以确定 阅读全文
posted @ 2024-01-20 18:17 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 不难想到,求区间和可以先 \(O(n)\) 预处理前缀和,后面就能做到对于区间 \([l,r]\) 可以 \(O(1)\) 求出 \(\sum_{i=l}^r a_i\)。接下来考虑如何求解答案。 设预处理后的前缀和数组 \(sum_i=\sum_{j=1}^i a_j\)。 区间 \([l,r]\ 阅读全文
posted @ 2024-01-20 18:16 liyilang2021 阅读(3) 评论(0) 推荐(0) 编辑
摘要: Update on 2023.8.17:修正了一处小错误。 分析题目可知,答案至少为 \(\sum_{i=1}^{n} a_i\)。接下来考虑怎样使答案更大。 可以对 \(n\) 分成如下几类情况讨论: \(n=2\) 这种情况十分简单,如果选择操作最多一次,否则两次就会变为 \(0\)。用 $ \ 阅读全文
posted @ 2024-01-20 18:16 liyilang2021 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 考虑将 \(1\) 号点定为树根,然后通过搜索确定结点之间的父子关系。对于每次操作,先判断该边两端的点的父子关系,然后再分类讨论进行操作。 如何维护每个点的点权呢?注意到,修改有很多次,但查询只在最后有一次,因此可以考虑树上差分。具体地,设 \(a_i\) 表示 \(i\) 的点权,\(f_i\) 阅读全文
posted @ 2024-01-20 18:15 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 不难想到,可以枚举每个 \(a_i\) 的倍数,并用一个数组统计出现次数,最后求最大值,理论时间复杂度 \(O(n \log n)\)。但如果 \(a_i\) 较小且重复出现,可能退化到 \(O(n^2)\)。因此可以做一个小优化:对于每个 \(a_i \le n\),提前统计出每个数出现的次数,枚 阅读全文
posted @ 2024-01-20 18:15 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 根据题意,不难想到贪心,将 \(a\) 从小到大排序,使得相邻两数之差的绝对值尽可能小。若存在两数之差的绝对值大于 \(k\),则将两数之间作为一个“分界线”。在确定所有“分界线”后,序列被分成了多个子段,这些子段中最多保留一个才能满足条件。根据贪心,选择保留最长的一段,用 \(n\) 减去其长度即 阅读全文
posted @ 2024-01-20 18:14 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 要找到这个单词,就要先找到这个单词的开头,在输入时即可判断。根据题意,保持列数不变,增加行数,直到不为字母,输出途经的字母即构成了单词。 #include <bits/stdc++.h> #define int long long using namespace std; char a[9][9]; 阅读全文
posted @ 2024-01-20 18:14 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 签到题,按照题意模拟即可。遍历整个数组,当 $a_i \le 10 $ 时,用 \(b_i\) 更新最大值即可。 #include <bits/stdc++.h> #define int long long using namespace std; signed main() { int T,n,a 阅读全文
posted @ 2024-01-20 18:13 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 看到本题,很容易想到贪心,对每一段相同的子串计算最小代价。但这种思路的评测结果显示有 \(3\) 个测试点 WA 了,因此解法错误。既然贪心行不通,我们不妨使用 dp,对每一位进行分类讨论并求最小耗时。 设 \(dp_{i,j}\) 表示 Capslock 状态为 \(j\) 时(\(j\) 为 \ 阅读全文
posted @ 2024-01-20 18:12 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 由题意可知,猫猫至少需要进行 \(n\) 的数位和次操作。注意到一个关键信息,当有前导 \(0\) 时猫猫会立刻拿走该雪糕棒,因此此时不能修改其数值。所以结论也就出来了:当 \(n\) 中存在 \(0\) 时,答案为 \(n\) 的数位和加 \(9\),否则当任意一位修改为 \(1\) 时,修改其为 阅读全文
posted @ 2024-01-20 18:12 liyilang2021 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 分析题意可知, \(a_i\) 始终为正数。将 \(a\) 从小到大排序后,\(a_1\) 无法做任何修改,所以 \(a\) 的奇偶性与 \(a_1\) 的奇偶性相同。对 \(a_1\) 的奇偶性进行分类讨论: \(a_1\) 为奇数 对于每个 \(a_i\),若 \(a_i\) 为奇数,则不做任何 阅读全文
posted @ 2024-01-20 18:11 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 由于题目保证有解,因此可以保证一定不超过 \(k\),可以忽略这个条件。要使得 $ |a_i - b_i| $ 最小,很容易想到贪心做法,将 \(a\) 和 \(b\) 分别排序,将位置相同的两个作为一对计算答案。显然这种做法能保证答案最小,证明过程不详解。 代码如下: #include <iost 阅读全文
posted @ 2024-01-20 18:08 liyilang2021 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一个有 \(n\) 个点的无向图。初始没有任何边。 接下来有 \(q\) 次操作,分为 \(2\) 种类型: 1 u v:连接 \(u\) 和 \(v\),保证没有重边、自环。 2 v:删除连接 \(v\) 的所有边。 每次操作后,输出没有连接其它任何点的点的数量(即度数为 \(0\) 的 阅读全文
posted @ 2024-01-20 18:07 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题意 一个人要送礼物给另外两个人,现有 \(n\) 件礼物要选一件送给第一个人,价值分别为 \(a_1,a_2,\cdots,a_n\),有 \(m\) 件礼物要选一件送给第二个人,价值分别为 \(b_1,b_2,\cdots,b_m\)。求在两件礼物之差不超过 \(d\) 的情况下,价值总和的最大 阅读全文
posted @ 2024-01-20 18:07 liyilang2021 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 题意 有 \(n\) 个字符串,它们的长度都为 \(m\)。问能否通过改变它们的顺序,使得后一个字符串能由前一个字符串只改变一个字母而得到? 思路 本题数据范围 $ 2 \le N \le 8 $,非常小,因此可以考虑全排列枚举所有的情况,最后检验是否存在符合要求的顺序即可。 代码如下: #incl 阅读全文
posted @ 2024-01-20 18:06 liyilang2021 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 很显然,满足条件的子段的异或和均为 \(0\)(因为每个数都出现了偶数次,而两个相同的数的异或值为 \(0\))。问题转化为求异或和为 \(0\) 的子段的个数。 不难想到,可以从前往后扫一遍,并且计算异或和,可以得出起点为 \(1\) 且满足条件的子段。那么如何计算中间的子段数量?有如下可行的方案 阅读全文
posted @ 2024-01-20 18:06 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题意 \(n\) 个袜子,每个袜子有一个颜色,如果有两个袜子的颜色相同,则可以把它们配成一对袜子。求一共能配成多少对袜子。 思路 看到颜色值域 \(1 \le a_i \le 10^9\),用普通的数组存不下。可以考虑对序列 \(a\) 排序,求出相同颜色袜子的数量 \(k\),则可以产生 \(\l 阅读全文
posted @ 2024-01-20 18:05 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题意 有 \(n\) 个人在银行里排队等待工作人员叫号。接下来有 \(q\) 个事件,事件的类型分为 \(3\) 种。 1 工作人员叫一个当前未被叫号的人过来。 2 x 代表编号为 \(x\) 的人来了(保证 \(x\) 至少被叫号一次)。 3 重复呼叫没有来的人当中编号最小的,并要求输出其编号。 阅读全文
posted @ 2024-01-20 18:05 liyilang2021 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题意 给定长度为 \(n\) 的序列 \(a\) 和长度为 \(m\) 的序列 \(b\),序列 \(c\) 为这两个序列连在一起组成的。求 \(a\) 和 \(b\) 中的每个元素在 \(c\) 中分别是第几小。 思路 STL 的练手题。输入时将 \(a\) 和 \(b\) 中的元素存入 \(c\ 阅读全文
posted @ 2024-01-20 18:04 liyilang2021 阅读(3) 评论(0) 推荐(0) 编辑