摘要:
$dp$。 记$dp[i][j]$表示已经放了$i$个数字,并且第$i$个数字放了$j$的方案数。那么$dp[i][j] = \sum\limits_{k|j}^{} {dp[i - 1][k]}$。答案为$\sum\limits_{k=1}^{m} {dp[n][k]}$ 阅读全文
摘要:
线段树。 线段树维护区间矩阵和,操作都是最简单的线段树。$lazy$标记不要记录乘了几次,直接记录乘了几次之后的矩阵就可以了,不然每次下传的时候再算一遍时间复杂度会提高。 阅读全文
摘要:
位运算。 又涨姿势了:$a + b = (aXORb) + 2*(aANDb)$,$ (aXORb)$是不进位的部分,$2*(aANDb)$为进位之后的部分,相加就是$a + b$。 知道了这个转换,这题就很容易了。设$n=a+b$,$m=(aXORb)$,$x=(aAND b)$;$n$、$m$和 阅读全文
摘要:
$KMP$。 $n=1$和$n=2$的时候可以单独计算。$n>2$时,可以拿字符和数字分别做一次匹配,然后扫描一遍判断一下就可以计算出答案了。 阅读全文
摘要:
暴力。 虽然$a[i]$最大有${10^9}$,但是$m$最大只有${10^6}$,因此可以考虑暴力。 记$cnt[i]$表示数字$i$有$cnt[i]$个,记$p[i]$表示以$i$为倍数的情况下,最多能选出多少个数字。 $p[i]$可以暴力计算出来,最后就是找到$p[i]$最大的$i$,然后输出 阅读全文
摘要:
简单题。 第一次交换$1$和$n$,第二次交换$2$和$n-1$,第三次交换$3$和$n-2$.....计算一下就可以了。 阅读全文
摘要:
简单模拟。 阅读全文
摘要:
枚举,三分。 首先,这$n+1$个人一定是连续的放在一起的。可以枚举每一个起点$L$,然后就是在$[L,R]$中找到一个位置$p$,使得$p4最优,因为越往两边靠,距离就越大,在中间某位置取到最优解,所以三分一下就可以了。 阅读全文
摘要:
二分,拓扑排序。 二分答案,然后进行拓扑排序检查,若某次发现存在两个或者两个以上入度为$0$的节点,那么不可行。 阅读全文
摘要:
$dp$,贪心。 不得不说这题出的很$6$,解法更$6$。 首先要会统计一个字符串有多少个本质不同的子序列,有两种$dp$策略: ①$dp[i]$表示$[1,i]$内的字符有多少种本质不同的子序列,$dp[i]=2*dp[i-1]-dp[pre[s[i]]-1]$,如果$s[i]$是第一次出现,那么 阅读全文
摘要:
树状数组,$map$。 可以理解为开一个数组$f[i][j]$记录:$i$这个数字在时间$j$的操作情况。 操作$1$:$f[x][t]++$。操作$2$:$f[x][t]--$。操作$3$:$f[x][1]$至$f[x][t]$求和。 数组开不出来,但可以开$map$,状态最多$100000$个, 阅读全文
摘要:
模拟。 每个奇数走的步长都是一样的,每个偶数走的步长也是一样的。 记$num1$表示奇数走的步数,$num2$表示偶数走的步数。每次操作更新一下$num1$,$num2$。最后输出。 阅读全文
摘要:
模拟。 把操作记录一下,倒着复原回去。 阅读全文
摘要:
$dp$。 这题的突破口在于要求数字是连续的。 可以分别记录两个串以某个数字为结尾的最长上升长度,然后枚举一下以哪个数字为结尾就可以得到答案了。 因为$case$有点多,不能每次$memset$,额外开一个数组记录一下这组$case$中数字有没有出现过。 阅读全文
摘要:
$dp$预处理,贪心。 因为$t$串前半部分和后半部分是一样的,所以只要构造前一半就可以了。 因为要求字典序最小,所以肯定是从第一位开始贪心选择,$a,b,c,d,...z$,一个一个尝试过去,如果发现某字符可行,那么该位就选择该字符。 第$i$位选择字符$X$可行的条件: 记这一位选择字符$X$的 阅读全文