随笔分类 -  题解 / CF

摘要:思路 很不错的人类智慧题。 拿到以后,完全没有思路,看到数据范围,感觉是什么 \(n^2\log n\) 的逆天做法,但是又完全没思路,看后面的题感觉没希望,就在这道题死磕。 先打了个暴力程序,发现平方数太多,没什么规律,就拿了个 map 统计一下那些出现数字方案拥有的平方数比较多 程序如下: #i 阅读全文
posted @ 2023-12-31 13:21 One_JuRuo 阅读(111) 评论(0) 推荐(0)
摘要:思路 首先,我们可以考虑两个人会怎么操作,如果是选择了两个偶数和两个奇数,那么答案不会减小,如果选择了一个奇数一个偶数,那么答案会减小一。 所以想使答案大的人应该尽量选择前一种方案,想使答案小的人应该尽量选择后一种方案。 但这还不是最优的,想使答案大的人在可以选择两个奇数时,绝对不会选择两个偶数,因 阅读全文
posted @ 2023-12-31 13:19 One_JuRuo 阅读(37) 评论(0) 推荐(0)
摘要:思路 看到题目要求求一个数 \(x\),满足它的最大的两个因数分别是 \(a\) 和 \(b\),并且规定一个数本身不是他的因数。 首先 \(x\) 需要是 \(a\) 和 \(b\) 的倍数,所以想到最小公倍数,如果不考虑最小公倍数等于 \(b\),最小公倍数就一定是答案,因为最小公倍数是最小的满 阅读全文
posted @ 2023-12-31 13:16 One_JuRuo 阅读(88) 评论(0) 推荐(0)
摘要:思路 简简单单构造题,就是要认真读题,是能且只能满足两个条件。 我们可以考虑每种数字,如果数字只有一个,是不能满足任何一个条件的,那就随便给一个 \(b\) 即可。 如果这个数字有多个,那么就只能有两种 \(b\),否则就会满足三个条件,所以一种数字最多满足一种条件。 所以,如果只有一个或者甚至没有 阅读全文
posted @ 2023-11-16 16:06 One_JuRuo 阅读(58) 评论(0) 推荐(0)
摘要:思路 首先可以知道答案的下界就是序列 \(a\) 原来的 LIS,现在需要做的就是尽可能地保持答案不增加。 可以肯定的是,将序列 \(b\) 从大到小地插入序列 \(a\) 是不劣的,并且如果在 \(a_i\) 前插入的都是 \(\ge a_i\) 的不会使答案增加,可以感性理解,如果原来的 LIS 阅读全文
posted @ 2023-11-14 14:48 One_JuRuo 阅读(56) 评论(0) 推荐(0)
摘要:思路 实际上,如果你会简单版本,那么困难版本也没有那么难了。 同样考虑构造一种通解,如下, 红色的格子改为 X,绿色的格子改为 O,就是一种通解,同样的,这样改可能会超过棋子总数的 \(\frac 1 3\)。 同样考虑将棋子按照位置分类,假如该棋子的位置是 \((i,j)\),那么按照 \((i+ 阅读全文
posted @ 2023-11-13 14:31 One_JuRuo 阅读(57) 评论(0) 推荐(0)
摘要:思路 如果去考虑 O 的摆放,再考虑那些改为 X,这样不好思考,实现也很不好写,所以我们可以考虑构造一种通解。 如果将上图所有标红的位置都放上 X,那么无论 O 如何放,都不可能胜利,而 X 因为原本就没有,所以摆上后也不可能胜利。 不过,因为更改的次数不能超过棋子总数的 \(\frac 1 3\) 阅读全文
posted @ 2023-11-13 14:29 One_JuRuo 阅读(58) 评论(0) 推荐(0)
摘要:思路 首先,对于 \(a_i\) 他必须得不小于最后的 \(a_{i-1}\),所以每个数乘的次数都是固定的。 如果暴力去乘 \(2\) 直到不小于为止,将会超时,所以考虑使用其他的方法进行优化。 因为前后两个数可以同时乘以 \(2\),相对比值不会变化,所以我们可以考虑对于最开始的 \(a_{i- 阅读全文
posted @ 2023-10-27 22:59 One_JuRuo 阅读(88) 评论(0) 推荐(0)
摘要:思路 如果每一次加或者删一个区间,再去暴力找有没有互不相交的区间的话,铁定 TLE。 那么,我们考虑维护有多少对互不相交的区间,那么每次加或者删一个区间,就去算这个区间对答案的贡献,然后再看答案是否为 \(0\) 即可快速判断有没有互不相交的区间。 现在考虑如何计算一个新加入或者删去的区间能让互不相 阅读全文
posted @ 2023-10-27 10:42 One_JuRuo 阅读(68) 评论(0) 推荐(0)
摘要:思路 大体上的思路应该和简单版本一致,建议先看本人关于简单版本的题解。 与简单版本不同的是,困难版本的 \(m\) 可以不为 \(1\),而是取遍 \([1,m]\) 中的整数,所以答案的总值会变大很多倍。 如果直接枚举 \(m\) 次,时间复杂度将会达到 \(O(mn\log n)\) 显然过不了 阅读全文
posted @ 2023-10-23 14:06 One_JuRuo 阅读(93) 评论(0) 推荐(0)
摘要:思路 考虑从大到小给每一个 \(b_i\) 匹配一个 \(a_j\),那么如果对于 \(b_i\),\(a_j\) 不能匹配,那么对于后续更小的 \(b_i\),\(a_j\) 同样无法匹配,所以可以直接忽略,跳到下一个,一直匹配,直到无法匹配为止,那么无法匹配的 \(b_i\) 的数量就是需要的操 阅读全文
posted @ 2023-10-23 14:05 One_JuRuo 阅读(68) 评论(0) 推荐(0)
摘要:思路 最开始都错题了,以为是不能通过另一种子串的选择方法得到这个子串就算做独特字串,实际上,是需要不能通过选择子序列的方式得到这个子串才满足条件,导致赛时没做出来(悲)。 实际上,如果一个子串满足条件,那么一个必要条件就是子串左侧没有与该子串左端一样的数字并且子串右侧也没有与该子串右端一样的数字。 阅读全文
posted @ 2023-10-23 14:05 One_JuRuo 阅读(70) 评论(0) 推荐(0)
摘要:思路 最开始晃眼一看,感觉很难,仔细一读题,哦,原来 \(k\in [2,5]\) 啊。 首先如果 \(k\) 是质数,也就是 \(k\) 不等于 \(4\) 的情况,必须要有一个数是 \(k\) 的倍数,那么计算每个数需要的操作数,取最小即可。 如果 \(k\) 不是质数,也就是 \(k\) 等于 阅读全文
posted @ 2023-10-23 14:05 One_JuRuo 阅读(56) 评论(0) 推荐(0)
摘要:思路 性质题,因为可以随便排序,所以只需要考虑数量满不满足条件即可。 一个回文串,应该满足所有的字符的数量都是偶数或者其中一个字符的数量是奇数。 所以可以直接扫一遍字符串,统计每个字符的数量,然后再统计数量是奇数的个数,如果这个个数大于 \(k+1\) 就无解,否则有解。 AC code #incl 阅读全文
posted @ 2023-10-23 14:04 One_JuRuo 阅读(76) 评论(0) 推荐(0)
摘要:思路 Step1. 贪心 拿到题后,第一时间想到贪心,如果这个区间加上会使答案变小或不变就不加。 但是很显然,这个贪心是错误的。 如果答案的最大值在区间 B,但是先加了区间 A,导致加区间 B 使答案不变,那么这样就会使答案变劣。 所以贪心是错误的。 Step2. 枚举 接着,想到了可以枚举最小值, 阅读全文
posted @ 2023-10-23 14:04 One_JuRuo 阅读(56) 评论(0) 推荐(0)
摘要:思路 一个比较明显的结论是,不同的数字个数只可能是 \(1,2,3\)。 可以随手写一个暴力的输出程序,假定 \(n\) 和 \(m\),把所有可能的序列都输出来,就可以发现这个规律。 也可以感性思考一下。 如果第 \(n+1\) 位是 \(0\),那么整个序列都会是 \(0\),个数也就是 \(1 阅读全文
posted @ 2023-10-09 22:54 One_JuRuo 阅读(104) 评论(0) 推荐(0)
摘要:思路 要求从一个点开始最远可以选择那个点使得两点之间的数字的与大于等于 \(k\),最开始想到的是提前预处理出每个点往后若干位的与,因为与只可能变小不可能变大,所以可以二分找到最远的位置,但是这样无论时间还是空间都会爆掉,所以我们考虑优化一下这个办法。 既然不能把每个点的后面的位置的与全部算出来,那 阅读全文
posted @ 2023-10-06 18:59 One_JuRuo 阅读(52) 评论(0) 推荐(0)
摘要:思路 要求最长长度,想到可以二分答案。 那么现在需要考虑如何快速验证答案是否正确。 可以 \(O(n)\) 枚举区间左端点,因为有了长度,所以可以直接获得右端点的值,直接验证右端点是否合法。 因为要求区间的每个数都是右边的数的倍数,所以可以提前预处理每个点最远的满足这个条件的右端点,直接判断合不合法 阅读全文
posted @ 2023-10-01 10:20 One_JuRuo 阅读(73) 评论(0) 推荐(0)
摘要:思路 看到 \(n\) 的范围只有 \(5000\),并且 \(\sum n\) 的范围也是 \(5000\),所以可以考虑 \(n^2\) 的做法。 每次操作肯定都是一次性删完某个数字,如果删除某个数字删一半又去删别的数字,答案肯定会变大。 所以我们可以考虑统计所有数字的数量,记为 \(num_i 阅读全文
posted @ 2023-10-01 10:19 One_JuRuo 阅读(76) 评论(0) 推荐(0)
摘要:思路 首先我们可以考虑把能分的都先分了,再选择去切剩下的苹果。 那么我们只需要考虑苹果数量少于人数的情况,每个人能分的苹果都必然少于目前的单个苹果,所以每个苹果都必须切一刀,那么答案数就会增加当前的数量,再把能分的都分了,重复这一过程,直到分完为止。这样去切一定是最优的。 那么,什么时候无解呢? 因 阅读全文
posted @ 2023-10-01 10:19 One_JuRuo 阅读(116) 评论(0) 推荐(0)