10.30
感觉最近状态都不是很好,每次打完简单题就想不到后面的题的方法了,只能打部分分……
要调整好状态,虽然考完 CSP 了,但是真正的考验在 NOIP,我要做好准备,不能再跟去年一样了……
第二题想到正解之后已经来不及打代码了,说明我现在无论从思考速度还是代码实现速度来说都还有很多的不足,希望我能尽快调整好状态。
10.31
今天的感觉大部分人衡中后三题都打的暴力。
当我发现我不能实现满分的时候,或者实在是没有思路的时候,一定要先保证自己的部分分要打的尽量的多,而不是死磕正解,最后只能打少量的部分分。
当我准备死磕一道题前,一定要确保拿完所有题当前情况能拿的最高分再开始死磕,这样子才能使得自己的分数最大化。
11.1
总结
今天后面两题很难,于是我没有多想,及时的放弃了后面的两题,而是把时间花在了第二题,我觉得这一场我对自己的策略还是执行的比较好的。
唯一的缺点就是想做法的时候总是容易忽略很多种及其特殊的情况,或者说根本没有考虑全面,就像今天的第一题,我的代码只能应付部分情况,但我还以为它是对的,这暴露了我在思考问题时还是不够全面,并且考试的时候也没有打对拍去检查。
我要加强对拍的习惯,以后做完每道题,只要能打暴力,就一定要打暴力对拍,这样就能增加自己代码的正确性,及时发现错误,及时更正。
T1
题目的大概意思就是让你求出序列 a a a 中有多少个子区间满足这个区间中的数的所有值域连续段的长度不超过 k k k。
这道题我考场上很快想出来了一个做法,就是倍增,记录从每个点开始,最早出现从 a i a_i ai 到 a i + 2 j a_i + 2^j ai+2j 和 a i a_i ai 到 a i − 2 j a_i - 2^j ai−2j 的位置。
但是我在处理的时候忘记考虑有可能就是先出现 a i + 2 a_i + 2 ai+2,再出现 a i + 1 a_i + 1 ai+1 的情况了,所以考场的做法寄掉了。
但是我打完这道题后觉得这道题很简单,并没有花费时间去打这道题的暴力然后去对拍,而是想的留下多一点的时间去想后面的题,如果有时间再说。
T2
题目的大概意思就是让你维护一个数据结构,这个数据结构有两个操作,分别是插入一个数和随机弹出一个不是最大值的数,然后让你求对于每一个操作,如果当前操作是插入则求这个数被删除的位置的期望,如果当前操作是随机弹出一个不是最大值的数,则求出弹出的数的期望。
考场上大部分的时间都拿出来想这道题了,因为这道题的大概思路很好想,就是顺着求出弹出的期望和逆着求出插入的期望,但是弹出操作的细节很恶心,我也是调试了挺久才调出来的。
T3
题目的大概意思就是给你一个二维图,它从左到右可以分成 n n n 列,每列高为 a i a_i ai 。对于每一列,又可以从下到上分为 a i a_i ai 块,并且最上面一块权值为 1 1 1,从上到下权值依次加 1 1 1,其他地方的权值为 0 0 0,然后你要将这个二维图分为多个矩形,每一个矩形内部不能有权值为 0 0 0 的块,必须有权值为 1 1 1 的块,每个矩形的代价是当前矩形中最大的值,求如何划分使得总代价最小。
我看完这道题也是没有任何思路,于是我并没有过多的思考这道题,而是直接打了暴力,将更多的时间花费在第二题上。
这道题的大概思路就是 DP 去解决问题,DP 的时候写一个哈希记搜就可以了。
T4
题目的大概意思就是给你一个由 0 0 0, 1 1 1, 2 2 2, a a a, b b b, c c c, ? ? ? 组成的字符串,其中 ? ? ? 可以变成 0 0 0, 1 1 1, 2 2 2, a a a 可以变成 0 0 0, 1 1 1, b b b 可以变成 0 0 0, 2 2 2, c c c 可以变成 1 1 1, 2 2 2,对于每一对 l l l 和 r r r,求有多少种方案使的对于 l l l 到 r r r 的字符串满足恰好有奇数个满足其本质不同的子序列的个数为奇数个的子串。
考场上看完题后一点思路没有……
正解似乎是维护等价类的大小,然后套一个猫树。
没学过猫树……
11.2
总结
今天的题相对于之前比较简单,主要是被第三题的大样例坑了一把,以后要注意当大样例没过的时候不一定是自己的代码问题,有可能是大样例的问题。
但是对于自己的策略执行还不是很到位,有时候一调起代码就忘记了所有的策略,这个还需要努力去改变,每次不管是打模拟赛还是打正式的比赛,一定要严格按照自己指定的策略去打,而不是乱打一气,这样才能使自己的每一次考试都不会太差。
现在的我对于一些比较常见的技巧还是不能很快反应过来,总是要思考一会才能想到,说明我还需要做更多的题,积累和运用更多的技巧,加快自己思考的速度。
T1
题目的大概意思就是给定一个正整数 k k k,判断是否存在 n n n 满足 n 2 n^2 n2 是 k k k 的倍数, n n n 不是 k k k 的倍数,如果存在求出最小的 n n n。
这道题非常的简单,考场一下就想到了,也迅速的打了出。
正解就是如果 k k k 有平方因子,则存在 n n n,然后枚举 k k k 的质因子,答案只取质因子个数的一半。
T2
给定一个只包含 1 1 1 到 9 9 9 的数列 a a a,当满足 g c d ( a i , a i + 1 ) = 1 gcd(a_i, a_{i + 1}) = 1 gcd(ai,ai+1)=1 时,可以交换 a i a_i ai 和 a i + 1 a_{i + 1} ai+1,求你能得到多少种数列。
考场上刚开始想成图论了,想了挺久没想出来,就按照策略暂时放弃先看后面的题,回来再想的时候发现不用图论,想了一下转换,但还是最后推式子退错了,没有调出来……
正解就是分类讨论即可。
T3
题目的大概意思就是给你一个数列 x x x,再给你两个数 a a a, b b b,分别是将 x i x_i xi 变成 x i + 1 x_i + 1 xi+1 的代价和 x i x_i xi 变成 x i − 1 x_i - 1 xi−1 的代价,让你求对于每一个 i i i,使得前 i i i 个 x i x_i xi 相等的最小代价。
考场上想到做法后打了出来,发现没过大样例,调了很久,调到忘记了时间,也忘记了策略,这一点是非常不好的,如果调不出来最好先放一下,打完暴力,思考一下别的题目再回来调。
调了很久大样例觉得自己代码没问题,于是就检查了一下大样例,发现大样例不满足他给出的数据范围,改了一下就过了大样例……
但是最后被卡常数了……
正解就是用权值线段树维护,并且每一次最小代价变成的值一定在原数列上出现过,并且对于 i i i 和 i + 1 i + 1 i+1 的变成的值 X i X_i Xi 和 X i + 1 X_{i + 1} Xi+1, ∀ 1 ≤ j ≤ i + 1 \forall 1 \leq j \leq i + 1 ∀1≤j≤i+1,都不存在 m i n ( X i , X i + 1 ) < x j < m a x ( X i , X i + 1 ) min(X_i, X_{i + 1}) < x_j < max(X_i, X_{i + 1}) min(Xi,Xi+1)<xj<max(Xi,Xi+1),于是可以 O ( n l o g n ) O(n\ log\ n) O(n log n) 做。
T4
题目的大概意思就是给出一棵树,树上的每条边的边权为 1 1 1,长度为 d d d 的简单路径的代价为 2 d 2^d 2d,给你 q q q 个询问,每个询问给出 x x x 和 y y y,求同时经过 x x x 和 y y y 的所有简单路径的代价和。
其实这道题不算很难,但是由于第三题消耗太久时间,第二题也没调出来,最后也没有仔细的思考这一题。
正解就是用 Tarjan 求出 LCA 后求出树形 DP 和换根 DP 即可。
11.3
总结
今天感觉做了一场专题……
除了第一题简单,后面三题巨恶心的期望题,没有一道会做……
终于再一次体会到了罚坐的感觉……
发现自己期望实在是太差了,高斯消元都忘光了,看来要多花些时间在期望和数论的复习上了。
T1
题目的大概意思就是给你 n n n 和 m m m,集合 S = { x ∣ 1 ≤ x ≤ n , ϕ ( x ) ≤ m } S = \{ x | 1 \leq x \leq n,\phi(x) \leq m \} S={x∣1≤x≤n,ϕ(x)≤m},两个人轮流从集合 S S S 中取数,每次选一个数 x x x,取出 x x x 和 x x x 的因数,当一个人不能再取时输,求是否先手必胜。
一个博弈论,考场思考一下就想出来。
你可以发现如果 m = 0 m = 0 m=0 则先手必败,否则先手一定必胜,因为如果你先手选 1 1 1 必胜则选 1 1 1,否则假设先手选 1 1 1 后后手选 x x x 时后手必胜,则你先手开局时可以直接选 x x x,于是先手必胜。
T2
题目的大概意思就是给你一个 n ∗ m n * m n∗m 的黑白矩阵,每次你随机取一对数 x x x 和 y y y,将以 ( 1 , 1 ) (1,1) (1,1) 为左下角, ( x , y ) (x,y) (x,y) 为右上角的矩形随机涂成黑色或白色,让你求从初始矩形到目标矩形的期望步数。
看到期望就寄……
考场上思考了一下想到了高斯消元的暴力,没想到正解,但是最后暴力没打出来……
正解就是先对于矩阵处理一下,变成如果当前位置为 1 1 1,则表示当前位置的右上角已变为目标矩阵的右上角,如果为 0 0 0 就是没变成目标矩阵的右上角,然后再高斯消元。
T3
题目的大概意思就是有一个 n ∗ m n * m n∗m 的网格,上面有 k k k 个格子有数,对于每个询问给出 r r r,随机的从网格中选 r r r 个点作为起始点,让你求出区分出每一个起始点的期望代价。其中你按照回形的方式探索地图,每走一步的代价是 1 1 1。
考场上根本不会,并且觉得第二题简单点,于是并没有想很久。
正解是 DP,然后用多项式维护 DP,不是很会。
T4
题目的大概意思就是有 n n n 个盒子,对于每个盒子中有 k i k_i ki 个物品,从这个盒子中取出物品需要 c i c_i ci 的代价对于第 i i i 个盒子中每个物品的价值是 a i , j a_{i,j} ai,j,其中打开一个盒子概率取出物品,每一个物品被取出的概率为 p i , j p_{i,j} pi,j,你每次可以打开一个盒子,拿出物品后在确定下一步的策略,如果你采取最优策略,让你求取物品代价的期望值。
考场上觉得很难,直接放弃思考。
正解可以用 DP,只不过要维护一个支持单点修改和查询前缀乘积的数据结构来 DP,不是很会。
11.4
总结
今天是图论专场……
感觉今天发挥还不错,就是第三题想到的乱搞做法没分,这是比较遗憾的一点。
第二题他样例把所有的特殊情况都给了出来,如果没给我也没考虑到那些特殊情况,以后所有的题目打完后一定要测试一下特殊情况下有没有问题,需不需要特判。
今天也没什么要调题的地方,所以在执行策略上也没有太大的问题。
今天跟昨天的比赛一比较,感觉对于图论的掌握比昨天的数论和期望要好很多,复习图论的时间可以少一点,多复习一些其他自己掌握不牢固的知识点。
T1
题目的大概意思就是判断是否存在一棵树,满足它有 a a a 个度数为 1 1 1 的点和 b b b 个度数为 3 3 3 的点,如果存在请给出一个节点数不超过 2000 2000 2000 的构造,否则输出 0 0 0。
这道题还是比较简单的,考场上也很快想到了,他样例也造的很强,把所有特殊数据都造出来了。
正解就是当 a < b + 2 a < b + 2 a<b+2 或 a = = b + 3 a == b + 3 a==b+3 时是不存在这样的树的,否则你每次将一个叶子结点增加两个儿子节点,使得度数为 3 3 3 的点的个数为 b b b,然后在根节点上连 a − b − 2 a - b - 2 a−b−2 个点就可以了。
注意特判一下 a = 0 a = 0 a=0, b = 0 b = 0 b=0 和 a = 2 a = 2 a=2, b = 0 b = 0 b=0。
T2
题目的大概意思就是给一个连通有向图,每条边有一个正边权,然你找到从 1 1 1 到 n n n 的最小路径,其中一条路径的代价为 m a x i = 1 t i ⋅ w i max_{i = 1}^t i \cdot w_i maxi=1ti⋅wi。
考场刚开始想错方向了,先看后面的题后再回来看,就想到了正确的做法。
正解就是二分答案,然后判断能不能从 1 1 1 走到 n n n 即可。
T3
题目的大概意思就是给你一个简单无向连通图,你现在删掉若干条边,要最大化度数为奇数的点的个数,给出构造,如果有多种方案,输出保留的边尽量小的方案。
考场上没有想到很好的做法,想到的乱搞做法也没分。
正解就是先找出最大生成树,然后将其它的边保留,最后从编号小的边开始枚举最大生成树上的每一个点,判断保留它后能不能满足最大化度数为奇数的点的个数,能就保留,否则就删掉即可。
T4
题目的大概意思就是给你 n n n 个矩形,有 q q q 个询问,对于每个询问,给出一个矩形,求出 n n n 个矩形的并与询问的矩形的交的面积,询问强制在线。
看到题后一脸茫然,于是乎直接打了一个暴力跑路。
正解就是扫描线然后可持久化,不是很会。