T1 考试(EXAM)
模拟判断两条原则是否满足,首先判断第一个原则:是否有连续的两个 111,其次判断第二个原则:对于每一个为 000 的位置,判断其前后是否没有 111 ,如果都不是 111 则可以将这个 000 变为 111 ,输出 No。
注意边界的情况,如果前面的三个位置是 001001001 时不满足第二个条件,同理最后三个位置是 100100100 时也不满足条件。
T2:好数(NUMBER)
40%
O(n4)O(n^4)O(n4)枚举即可。
70%
A[i]=A[x]+A[y]+A[z],x<y<z<iA[i] = A[x] + A[y] + A[z] , x < y < z < iA[i]=A[x]+A[y]+A[z],x<y<z<i
维护小于iii的A[x]+A[y]+A[z]A[x]+A[y]+A[z]A[x]+A[y]+A[z]的和即可,时间复杂度O(n3)O(n^3)O(n3)
100%
A[x]+A[y]+A[z]A[x]+A[y]+A[z]A[x]+A[y]+A[z]通过类似010101背包的方式维护,维护两个数字构成的和的情况,三个数字构成和的情况,用bitset优化加速即可,时间复杂度O(n364)O(\frac{n^3}{64})O(64n3 )
100%
表达式类问题可以通过移项优化枚举策略
A[i]=A[x]+A[y]+A[z]→A[i]−A[z]=A[x]+A[y],x<y<z<iA[i] = A[x] + A[y] + A[z] \rightarrow A[i] - A[z] = A[x] + A[y], x < y < z < iA[i]=A[x]+A[y]+A[z]→A[i]−A[z]=A[x]+A[y],x<y<z<i
枚举iii和zzz,维护小于iii的A[x]+A[y]A[x]+A[y]A[x]+A[y]的和即可。
复杂度O(n2)O(n^2)O(n2)
T3 小 Z 的手套(GLOVES)
20分做法
N=MN=MN=M,将左手手套和右手手套排序后,首位逐一匹配即可。
另外50分
发现瓶颈在于匹配,匹配的前提是不会超过答案,因此可以考虑从小到大枚举丑陋度(即尺码差)的最大值,然后对于每一个左手手套贪心匹配右手手套,这个可以通过排序和二分来加速。
同时发现丑陋度(即尺码差)的最大值一定是左手和右手手套尺码组合出来的值,可能的答案不超过 n2n^2n2 种,复杂度 O(n3)O(n^3)O(n3)。
100分做法
最小化最大值,考虑二分答案。
首先,我们需要确定丑陋度的可能范围。最小丑陋度显然是 000(如果恰好有匹配的尺码),最大丑陋度则是左手手套和右手手套中的最大差值。我们可以使用二分答案来在这个范围内搜索最优解。
在二分查找的每一步中,我们假设一个丑陋度阈值 mid,然后尝试找到满足这个阈值的最大匹配数。我们可以对左手手套和右手手套的尺码分别进行排序,然后使用双指针的方法从两端开始匹配,如果两只手套的尺码差小于等于mid,则它们可以配对,然后移动两个指针。最终,我们得到了满足丑陋度阈值mid的最大匹配数。
如果匹配数等于最大能够配对成功的手套数量(即左手手套和右手手套数量中的最小值),那么mid可能是一个解,我们尝试缩小搜索范围到左半部分;否则,我们需要增加丑陋度阈值,所以搜索范围移动到右半部分。
复杂度O(nlog∣Li∣)O(n \log |L_i| )O(nlog∣Li ∣)。
「补充证明双指针配对的正准确性」
* 讲左右手套按照大小从小到大排序,然后两个指针从头开始配对,证明 iii 配对的 jjj 一定是单调的,并且此时一定是最优匹配。
* L: ...ab...L:~...ab...L: ...ab...;R: ...cde...R:~...cde...R: ...cde...,假设 aaa 与 ddd 配对,已知 ∣a−d∣≤x|a-d|\le x∣a−d∣≤x 并且 ∣a−c∣>x|a-c|>x∣a−c∣>x,需要证明 ∣b−c∣>x|b-c|>x∣b−c∣>x
* 只有两种情况使得上述情况成立
1. c≤a≤d,a≤bc\le a\le d,a\le bc≤a≤d,a≤b
2. c≤d≤a,a≤bc\le d \le a,a\le bc≤d≤a,a≤b
* 无论是哪种情况,都有 ∣b−c∣>x|b-c|>x∣b−c∣>x
T4 刷题训练(TRAIN)
20分做法
对于 20%20\%20% 的数据,m=0m=0m=0
没有任何操作可以做,所以只有所有的 aia_iai 都满足 ai≤ka_i\le kai ≤k 才可以,答案是 000 ;否则是 −1-1−1
另外20分
对于另外 20%20\%20% 的数据,只有第一种类型的魔法(即修改某一道题的难度)
如果所有 ai>ka_i>kai >k 的都可以修改,答案就是这样子的题目个数;否则是 −1-1−1
另外20分
对于另外 20%20\%20% 的数据,第一种类型的魔法只有一个。
考虑图论做法,交换两个题,本质上是连边,只要一个点能被换到有第一类操作的地方,那么这个点就可以被修改。
因此找到第一类魔法操作的点,跑一个单源最短路,答案就是所有不合法的点的 dis 之和 + 不合法点的个数。
满分做法
对于全部数据,1≤n,m,k,ai≤2∗106,1≤x,y≤n1\le n,m,k,a_i\le 2\ast 10^6, 1\le x,y\le n1≤n,m,k,ai ≤2∗106,1≤x,y≤n。
我们可以把所有第一类魔法操作的点放到队列中,跑最短路。
因为图没有边权,所以可以直接用 BFS 求最短路即可,复杂度 O(n)O(n)O(n)。