iOS
P8112 [Cnoi2021] 符文破译 题解
题目传送门 思路 先看数据范围,我们发现两个字符串的长度最大会达到 (5 times 10^7)。 这立刻打消了我用暴力的想法。 于是,我选择了用 KMP 模式匹配,这一个能够在线性时间内判定字符串 (A) 是否是字符串 (B) 的字串,并求出字符串 (A) 在字符串 (B) 中各次出现的位置。 如果不清楚 KMP 算法是如何实现的,可以看看这个或这个。 我们知道一个字符串 (A) 每次往后成功匹
AT_codefestival_2016_final_b
根据题意,很容易得知要使得它们的最大值最小,就要从最小的 (1) 开始用。转化一下题意,不难发现,我们只需求出最小的 (k),使得 [ sum_{i=1}^k i ge n ]于是思路便产生了:对 (1),(2),(3),⋯(k) 求和,直到上述式子成立。可以很容易地看出来一个规律: [( sum_{i=1}^k i ) - n<k+1 ]根据这个规律,我们知道多出来的那一部分就存在于 (
AT_abc188_d
看到这题,第一反应是用线段树。但本题数据 (1 le a_i le b_i le 10^9),时间、空间复杂度均无法接受,于是改变思考方向。 维护区间修改的另一种方法是差分。但是由于区间长度很长,就不能对整个差分数组进行计算。取而代之的有一种方法,即将所有的有差分值的点记录下来,按其时间先后顺序进行排序,最后再依次枚举每一个点,计算当前每天应交的钱,再计算当前区间的长度,即可求出每一个区间的应交的
AT_abc179_d
题意 给定 (n) 和 (k) 个区间,并且保证 $ k le 10$ 且互不相交。可以进行任意次操作,每次可以选择一个整数 (j),(j) 要满足在其中一个给定的区间上,从当前位置向右移动 (j) 的距离。求 (1) 到 (n) 的方案数。 思路 提供一种数据结构的做法。 依次枚举 (1) 到 (n) 的每个点,对于每个点,先查询其方案数(已知),然后枚举每个区间,确定从当前点出发能跳到的区间,
AT_abc179_e
题意 定义 (f(x,m)= x bmod m)。 有一个序列 (a),满足 (a_1=1),(a_i=f(a_{i-1}^2,m))。 求 [sum_{i=1}^na_i ]思路 这道题 (n) 的数据范围很大,但 (m) 最多只有 (10^5),因此考虑以此为突破口。 需要用到如下的同余性质: [(a times b) bmod m = (a bmod m times b bmod m) bm