- 求一个字符串中最长不重复连续子串、最短包含所有字符的子串(维护区间信息)
可用双指针求解。 - 多个不同长度的字符串相互循环对应,循环节的长度(对应多少次可以回到之前最近相同的对应)是所有字符串的长度的lcm。
- 构造题:构造从1到k的平方之和(差),使其等于n
可以利用 ( x + 1 ) 2 − ( x + 2 ) 2 − ( x + 3 ) 2 + ( x + 4 ) 2 = 4 (x+1)^2-(x+2)^2-(x+3)^2+(x+4)^2=4 (x+1)2−(x+2)2−(x+3)2+(x+4)2=4来构造。 - 对于一个二次函数
f
(
x
)
(
x
∈
Z
)
f(x)(x\in Z)
f(x)(x∈Z),求它的x满足一定条件下的最值
预处理出满足条件的所有x,存储在数组中,在数组上二分查找f(x)的对称轴。 - 求一个数列中相等元素对的个数
用map或排序统计出数列中每个元素出现的次数 n i n_i ni,答案就是 ∑ n i ( n i − 1 ) 2 \sum \frac{n_i(n_i-1)}{2} ∑2ni(ni−1)。 - 打砖块
每一列的敲打相对独立,所以用列作为dp的阶段。设dp[i][j]表示前i列用了j个子弹,所能获得的最大得分。考虑前i-1列和第i列,子弹在它俩中的分配可以进行状态的转移,则dp[i][j]=max(dp[i][j],dp[i-1][j-k]+v[i][k])(v[i][k]表示第i列用了k个子弹所能获得的分数)。
如果不考虑赠送子弹,就是上述做法。由于赠送了子弹,造成v[i][k]的计算出现困难,第k发打的是不是全局最后一颗子弹,影响到v[i][k]的值。所以就分开讨论,加一个第三维,dp[i][j][0]表示最后一弹在前i列中打出时的最大得分,dp[i][j][1]表示最后一弹不在;v[i][k][0]表示最后一弹恰在第i列中打出时第i列打k枪的得分,v[i][k][1]以此类推。
转移时,枚举最后一弹在前i-1列中、恰在第i列中、不在前i列中三种情况,相应地进行转移。 - 给定 n,m,然后再给 m 个素数 p1~pm,问对于所有 i∈[1,n],将 i 减小至 0 的最小操作次数。每次操作允许将当前的 i 减小 i%p,p 为给定素数里的一个。
- 对于i>lcm(p1,p2,…,pm), a n s i = − 1 ans_i=-1 ansi=−1,无法减小到0。
- 与其正着看减小,不如倒着看,x可以从哪些数转移而来?设p是x的质因数,则x可以由[x+1,x+p-1]转移而来。p取最大质因数时,区间最长。
- 最大质因数可以用线性筛(线性筛还可以求解最小质因数、最大因数等)。
8.28ccpc网络赛笔记
最新推荐文章于 2024-09-06 10:38:06 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)