其他分享
首页 > 其他分享> > 省冲笔记

省冲笔记

作者:互联网

暴力枚举 前缀和

例1

十次函数 $f(x) = \sum{10}_{i=1}a_ixi+a_0$,已知 $f(1), f(2),f(3),\dots,,f(11)$,求 $f(12)$

疯狂求导

例2

读入 $n$ 个数字,有一个数字出现次数大于一半,剩下的数字随机出现,求出现次数最多的数字。(空间限制 $100$ 的数组)

例3

题面同例2,大于一半改为大于 $k/n$

例4

$2n+2$ 个数字,其中有两个数字是单独出现的,剩下的数字出现次数都为偶数,分别求那两个数字


分割线以下是难题

例1

$n\times m$ 的灯泡矩阵,每次改变一个位置的状态会影响上下左右的状态,给定初始状态问能不能全灭

例2

$n\times m$ 的灯泡矩阵,每次可以选择一列或一行将灯泡反向,给定初始状态,问操作恰好 $k$ 次最多能让多少列灯泡全为 $1$

例3

$n\times m$ 的矩阵,每个位置都有 $a_{i,j}$ 个地鼠,有一个 $r \times c$ 的锤子($r, c$ 任意),每次可以将这么大的范围内地鼠全部减一(必须保证这一些格子里至少有一个),至少用多少次打完?

思考题

暴力枚举 双指针

例1

给定长度为 $n$ 的数组,求有多少个区间 $[l,r]$ 满足 $\sum \limits_{i=l}^ra_i ≤ k$。

例2

$n$ 张 $m$ 种卡片,只能买连续的,求最少需要多少钱集齐 $m$ 种。

例3

给定长度为 $n$ 且只含 $\texttt{R G B}$ 的字符串,求要获取长度为 $k$ 且形式为 $\texttt{RGBRGB}\dots$ 的字符串最少需要修改多少个字符。

例4

给定长度为 $n$ 的数组,求有多少个区间异或和等于他们的和。

例5

给定长度为 $n$ 的数组 $A,B$,求 $\sum\limitsn_{i=1}\sum\limitsn_{j=1}(A_i+B_j)$ 的异或和。$n≤2\times10^5, 0 ≤A_i,B_i<2^{28}$

例6

例7(环形序列)

有一个环形序列,$A$ 可以指定一个位置将环拆开,接下来和 $B$ 轮流玩游戏,$A$ 先手。$A$ 可以任意取走一个元素,$B$ 只能从最左边拿,求 $A$ 能得到的最大分数以及拆的位置。

贪心算法

经典模型:偏序关系

例1

给定 $n$ 个正整数,求其首尾相连能连成的最大整数

例2 P1080 [NOIP2012 提高组] 国王游戏

经典模型:线段覆盖

例1 P1803 凌乱的yyy / 线段覆盖

例2

给定 $n$ 个线段,求最多有多少个线段有交集。

经典模型:按位贪心

例1

给定数组 $a$,$q$ 组询问给出 $k$,求 $k \oplus a_i$ 最大值。

例2

给定一个由 |, ^, & 组成的算式,如 m | 124 ^ 235 & 12423 ^ 12312,给定 $k$,求 $m$ 取何值且 $m \in [0,k]$,式子的结果最大。

思考题

$n$ 个数字,$1 ≤a_i≤10^{8}$,设 $S(i,j)$ 表示十进制下 $a_i+a_j$ 进位次数,求 $\sum\limitsn_{i=1}\sum\limitsn_{j=1}S(i,j)$。

例1(随机数生成器)

$n\times m$ 的矩阵中有 $[1,n\times m] $ 中的每个数,左上角走到右下角,经过 $n+m-1$ 个数,排序后将其视作字符串的 $\texttt{ASCII}$ 码,求给定矩阵后生成的所有字符串的字典序最小的字符串。

例2

俯视一个蓄水池,$n\times m$ 的矩阵中有每个点的高度,水会向四周流,求要使水不溢出边界,最多能蓄多少水。

例3

有 $n$ 个矮人和 $n$ 个精灵,每个矮人、精灵都有一个能力值,能力值两两不相同,矮人排成一个 $1$ ~ $n$ 的环,第 $i$ 个精灵会从第 $a_i$ 个矮人开始挑选第一个无对手的矮人比赛,如何安排精灵出场顺序使胜利场数最多。

例4

有 $n$ 个形如 $\texttt{15}$ $\texttt{15}$ $\texttt{15}$ $\texttt{14}$ 的字符串,将 $\texttt{*}$ 替换成数字并使 $n$ 个数单调递增,并使最后的结果数字尽量小,输出方案。

task 1: $len ≤6$ task 2: $len ≤18$ task 3: $len < 100$

二分

模板

int now = 0;
for(int stp = len; stp >= 1; stp >>= 1) {
	if(now + stp <= len && check(now + stp)) now += stp;
}
// 倍增

例1

四个长度均为 $n$ 的数组 $A,B,C,D$,任意 $a, b, c, d$ 求多少种方案使 $A_a+B_b+C_c+D_d = 0$

例2

$n$ 件衣服需要晾干,含水量为 $a_i$,每分钟蒸发掉 $1$ 单位水,一个吹风机每分钟可以蒸发 $k$ 个单位水,求最小时间

例3

$n$ 个项目组,每个项目组有 $a_i$ 个人,每次要从不同的 $k$ 个项目组里抽一个人,问最多能取多少次

例4

无限长数轴,有一个机器人一开始在 $0$,有一连串指令形如 $\texttt{LRRLRLLRLRLRRLRLLR}$,希望最终停在一个之前没有走过的地方,但是可以放墙,若下一步撞墙则不会走,最少需要几堵墙?方案数?

思考题

有一个动物园,动物都被关在左上角格子,逃出动物园必须从右下角逃出,上下左右均有边界,有两种动物老虎 $T$ 和牛 $C$,走过的路径会留下自己的脚印,后面的会覆盖前面的脚印,给定矩阵最后状态,求最少逃出去了几只动物。

例5

字符串,形如 $\texttt{.Y..YYY.YY..}$,最多可以交换相邻两个字符 $k$ 次,最后最多能得到多少个连续的 $\texttt{Y}$

例6

有一堵墙,堆沙袋最左边位置高度不能超过 $H$,向右堆和左边一堆相差不能超过 $1$,要求到最右边得堆个 $1$,要恰好用完 $n$ 个沙袋,问最少堆多少列。

搜索

例1

见题解


搜索技巧