由于 CSP 烂完了于是加训

11.1

CSP 野鸡比赛能不能滚出 OI 啊
CSP 野鸡比赛能不能滚出 OI 啊
CSP 野鸡比赛能不能滚出 OI 啊

考的很烂,出来的时候正在下雨,原来我已经是高二老登了吗,可是——

11.2

考 CSP 烂完了,找 PrincessQi 玩,交流了一下,pcq 和我说我可以先板刷月赛绿题,ABC 或者 CF *1500,因为 TJ 是神秘弱省,NOIP 其实只需要 200+ 就比较稳了,至于模拟赛比较烂完了所以不要打(?)

不过模拟赛出现了 LCT 板子我感觉确实不是啥正常模拟赛,棍母棍母棍母棍母

11.3

感觉没有发生任何比较有趣的事情?话说怎么都在打 FPS24,这是啥。

晚上似乎又开始犯病了,难受的厉害,不知道什么时候发了好多哭哭之类的东西,感觉可能不是很可爱,不知道别人怎么看

又莫名的买了好几套比较可爱的衣服,,不太记得什么时候买的,注意到的时候已经没法退款了,不过我也本来也没想退款

原题 AT_joisc2018_f

题面比较邪恶,但是我们可以发现第 \(i\) 个人一定是在某回合后一下子走好多步,也就是 \(f_i\) 个回合后一下子移动 \(f_i\) 步。

我们考虑对于 \(f_i\),它与 \(f_{i-1}\) 的关系是:

  • \(f_{i-1}≥d_i\),那么在移动后 \(i\) 就直接移动了 \(f_i\) 步直接移动到了第 \(i-1\) 人的身后,保持同步,\(f_i = f_{i-1}\)

  • \(f_{i-1}<d_i\),那么在移动很多次之后才会移动,比较邪恶,这个时候 \(f_i=\lceil\frac{d_i}{f_{i-1}}\rceil f_{i-1}\)

我们维护连续段,然后在询问时查询即可。

容易发现这个是一个冒泡排序,我们设 \(f_i\) 表示对于 \(a_i\),其前面的比它大的数的个数,在每一轮的排序中必然会导致 \(f_i - 1\),因为会有一个比他大的数在这个过程中与他交换,由于排序完成的条件是 \(\max\{p_i\}=0\),所以我们可以得出我们需要找的是 \(\max\{p_i\}≤k\) 的排列个数。

我们从小到大排序,可以发现 \(1\) 必须填到 \([1,k+1]\) 的位置,\(2\) 必须填到 \([1,k+2]\) 的位置……可以发现每个数都有 \(k+1\) 种填写方案,但是最后的 \(k\) 个数可以填的位置不够,只有 \(k!\) 种,那么我们可以算出方案数是 \(k!(k+1)^{n-k}\)

对于 \(k>n\) 的情况我们特判,答案为 \(n!\)

由于我写的时候很唐用数组存的阶乘,但是这道题是 \(n<10^{18}\),写个函数求就好了。

我去这道题我完全没思路啊,就只能看出来是二分答案,我怎么这么菜,但是我找题解能力比较强,找到了别人的题解,研究了一下。

我们可以很显然发现这道题是二分答案,我们二分时间 \(T\),计算对于 \(T\) 需要的总人数作为判断是否合法。

我们从右往左,去把工人分配给第 \(A_i\) 个设施,每个工人最多能检查的次数是 \(T-A_i\),而需要检查的次数是 \(\sum_{j=i}^{n}{B_j}-cnt\),这里的 \(cnt\) 是其他工人剩下的空闲检查次数,比较好发现对于这个 \(A_i\) 需要的工人数是 \(\lceil\frac{\sum_{j=i}^{n}B_j-cnt}{T-A_i}\rceil\) 人,我们维护一下总人数和 \(cnt\) 即可。

题目比较诡异,翻译一下其实是可以在整数时刻移动,只要在上个整数时刻到这个地方下个整数时刻直接跑路也算你过了一次活动。

感觉比较像是一个 dp,我们设 \(f_{0/1,w}\) 代表在 \(1/2\) 个城市,恰好参加了 \(w\) 个活动的最早结束时间。

对于一个 \(f_{i,w}\),其转移的路径有两条:跨城和同城,同城即 \(f_{i,w-1}≤S\),跨城即 \(f_{!i,w-1}+D+Kj≤S\)

线段数优化即可。

哈哈你怎么知道我赛时想出来了做法死活想不起来怎么打最小生成树。

最显然的思路,直接跑一个最小生成树然后拿出 \(n-1\) 条边,暴力枚举 \(k\) 个二进制位然后建边跑最小生成树,复杂度 \(O(2^kkn \log n)\),不是很能过,发现这个 \(\log\) 太邪恶,考虑怎么去掉,这个瓶颈在于每次的排序。

直接在最开始就排序,然后跑的时候判断在不在考虑范围就行,复杂度 \(O(2^kkn)\) 过了。

11.4

JOI 能不能来点人类题面啊。

题意大概是给定 \(Q\) 个长度为 \(N\) 的只含有 abc 的字符串,可以翻转区间 \([1,k]\),问需要最少多少次变成字典序单调不降。

注意到 \(n<13\),而且只有 abc 三个字符,考虑直接把 abc 压成 \(012\),然后有一个很神秘的思路,因为所有询问的 \(n\) 都是一样的,考虑把 \(3^n\) 的状态全部用 BFS 预处理出来,从每一种状态搜索变成单调不降是不好做的,所以倒着做即可。

感觉比较深刻,最开始没什么思路,看了题解比较恍然大悟。

我们考虑对于一棵树,我们向下搜索时每次加深都在对应的字符串中加入 (,回溯时则加入 ),那么我们就会得到一个长度为 \(2n-2\) 的字符串,这个字符串对于一棵树构成双射,

很显然的就是深度是对于每个 ) 前面的 ( 的个数减去前面 ) 的个数,容易发现这个其实相当于是在 \(2n-2\) 的长度中搞出来 \(n-1\)(),然后我们就能搞出来一个式子 \(ans=\binom{n-2}{2}\binom{n-4}{2}\cdots\binom{2}{2}\frac{1}{(n-1)!}\)

感觉题目比较神秘,仔细想了一下发现这题是似乎最短路板子题,考虑如果一个点灯人如果在一个点在 \(x\) 可以待着那么必然可以在 \(x+2\) 时刻待着,我们考虑跑最短路求最小值,诶诶这个好像是奇偶最短路啊,没事我写的时候不知道,我不会奇偶最短路/dk。

我们发现我们每次进行这样来回绕圈跑此时 \(x\) 的奇偶性没变,我们可以分两层跑最短路,然后就解决了,记得特判所有人卡在 1 号城市出不去的时候。

这不是搜索板子题吗,懒得写了。

容易发现由于只能在两端删除,因此亮着的部分是一个连续段,我们设连续段为 \([l,r]\),然后先计算 \([1,l-1]\)\([r+1,n]\) 的贡献,我们可以枚举两端 \(l,r\) 写一个转移方程得到一个 \(O(n^2)\) 的做法,但是比较邪恶的是这个做法好像过不了。

不过其实能发现跑一个三维前缀和+一个后缀和即可通过。

11.5

一早上就开始难受,没啥写题的欲望

我错了我再也不诋毁最小生成树了。

有一些比较暴力的想法比如把所有点都连起来然后硬做,一看复杂度 \(O(n^2 \log n^2)\) 过不去啊。

考虑先对边权排序,然后进行判断:

  • 如果两边颜色相同并且颜色内部没有联通,那么我们设这个颜色有 \(x\) 个点,我们用 \((x-1)b\) 的代价把内部的点全部连起来即可,此时我们就可以把这一整个颜色缩为一个点。

  • 如果两边颜色不同且没有联通,让两个点内部为 \(x,y\) 的话可以直接用 \(x+y-1\) 条边给连起来,算一下代价就行,然后把两个颜色缩点。

连通性可以并查集维护。

这题有绿?这题有绿?这题有绿?那我感觉绿题良莠不齐啊。

考虑每次移动的除了一次项以外还有一个常数,这个常数比较邪恶,所以考虑一次性尽可能多的运,限制我们的只有钱和时间,然后根据这两个进行调整即可。

神秘贪心题,思考一个接送的策略。

容易发现顺水是对答案没有影响的,只考虑对于逆行的情况。

对于一个 \(A\)\(B\) 两个乘客(\(B<A\)),我们根据其中一个的目的地和另一个的出发点来考虑策略,容易发现:

  • 如果 \(A\) 的目的地在 \(B\) 的出发点之前,那么我们可以拿到 \(A\) 再退回 \(B\) 之前把那个人送过去就行。

  • 如果 \(A\) 的目的地在 \(B\) 的出发点之后,那么就先送 \(A\) 再跑 \(B\) 的即可。

这个应该是比较显然的吧,你就考虑怎么才能不多跑原本不需要多跑的部分。

好久没看到 SPJ 了话说,看看怎么做。

这题感觉不算很恶心,你先把时间转化为秒数,这个时候每个时间都对应了一个独一无二的秒数(显然),然后跑一个区间加的线段树,线段树维护区间 \(+1\) 和区间和即可。

11.6

我们把整个区间分为三个部分:\([1,l-1]\),\([l,r]\),\([r,n]\)。最朴素的方法:对于每个 \(l\) 枚举 \(r\)。复杂度是平方级别的过不去,考虑优化。

我们发现对于一个区间 \([l,r]\),我们扩展一位变为 \([l-1,r]\) 或者 \([l,r+1]\),新得到的 \(\gcd\) 是原本区间 \(\gcd\) 的因数,容易发现最多降低 \(\log\) 次。

我们固定住一个端点,此时影响的就只有左端点 \(\gcd\) 的前缀和,发现左端点保持不变的情况下中间一段边长不会使答案变大,所以只取每段前缀 \(\gcd\) 相等区间的右端点作为前缀 \(\gcd\) 的计算即可。

傻子模拟题,不写但是给你挂题单里。

注意到下降不消耗电量,我们考虑对于初始起点 \(f\) 对所有人分为两类:\(r_i<f\)\(r_i>f\) 的。我们必然优先处理 \(r_i>f\) 的人,因为下降不消耗电量,不然会比较麻烦。我们对于 \(r_i>f\) 内部按照 \(l_i\) 排序,优先处理比较小的即可。

哈哈我不会字符串,赛时获得 0pts 的优秀成绩。

有一个比较显然的就是如果 \(|t_1|\not=|t_2|\),那么答案必然为 0,因为 \(|s_1|=|s_2|\) 无论怎么变换都变换不过去,不过我当时没看到,真是一对苦命鸳鸯/dk。upd:并非苦命,没卡这个。

后面的以后再补,写别的题去了,蹲一下 wang5 博客。

upd:wang5 居然更新了,但是我不想补,后面再说。

11.7

这题好像是签到题,容易发现移动唯一的影响只有把 \(S[1]\) 转移到 \(S[n]\) 处的时候会减少一次,把一个偶数串变成两个奇数串喵,然后暴力计算即可喵。

这题好像也是签到题,容易发现需要优先让各个队伍变成 \(k\) 的整数倍,我们按照距离 \(k\) 的整数倍的差进行排序,如果能全部填满剩下的直接计算就行了。

打个表先 \(\{1,0,2,4,3,5,6,8,7,9,10,12,11\}\),可以很简单的发现对于这种 impossible 的情况只出现在 \(n \pmod 4 = 0\) 的地方以及 \(n=1\) 两种情况下。

对于从 \(0\) 开始走到一个 \(f(x,y)\) 我们考虑没有斜着走的人的情况:显然是 \(x+y\) 步。

如果加上斜边

posted @ 2025-11-07 16:51  Vsinger_洛天依  阅读(51)  评论(3)    收藏  举报