官解:editoral
C
构造
基于\(D\)题的结论,设钦定子串的最左侧字符为\(A\),最右侧字符为\(B\):只要该子串左侧含有\(A\),或者最右侧字符含有\(B\),那么该子串便合法,只需要找到最长的子串即可。
还可以进一步发现:这个最长子串一定是原字符串的某个前缀或者后缀。否则,一定可以通过向某个方向延长而使解更优。
由于只需要构造一个合法串,因此钦定该子串是原字符串的前缀即可。
由于只有\(26\)个字符可供使用,可以\(guess\)一下:\(n-m\)一定不会超过\(26\)。否则由鸽巢原理,在除了钦定子串外的其他字符中,必然含有相同的字符,子串便可延长到这对相同字符的位置并使解更优。
那么构造的思路也就出来了:令\(str[n]==str[m]\),并且\(str[m到n-1]\)中不含有相同字符即可,这样保证了构造的字符串长为\(n\),且子串最长为\(m\)(前缀)。具体构造方式可直接按照字符的字典序循环构造即可。具体见代码。
code
E
思维 + ST表
对于任意询问区间\([l,r]\),推倒 \(a_l\), 考虑使得 \(a_i\) 倒下\((l+1<=i<=r)\),需要操作的最少次数:
最终要使得 \(a_r\) 倒下,则\(r\)前面的每一张牌都必须要倒下,即求上式的最大值:
则问题转化为了维护区间最大值,ST表或者线段树都可以做。具体地,可以维护\(a[i]-pre[i-1]\)的区间最大值\(mx\)\((1<=i<=n)\),求得结果再加上\(pre[l-1]\)即为\([l,r]\)上的答案。具体细节见代码。
code
H
思维 + 平面几何
三点不共线时可以共圆,则三点共线时,可以看做共一个无限大的圆。因此三点越接近于共线,圆越大。
因此最优情况为:其中两个点在一条边上,第三个点在另一条边上,并且该点与两点所在边尽可能接近。
剩下的就是正弦定理:尽可能让斜边更长,同时斜边所对的钝角更大,这样外接圆的半径就更长。具体细节见官解。
code
I
待补
code
M
组合数学计数
首先要明确,对于任意\(1<=i<=n\),所有\(mod 3\)剩余类对应列上的数字必须相同。即第\(1,4,7...\)列上的数字必须相同,第\(2,5,8...\)列上的数字必须相同,第\(3,6,9...\)列上的数字必须相同。证明略。
则最后得到 \(1,2,3\) 列上的三列数字,其中第\(1\)列对应\(1,4,7...\)列上所有数字的交集。
无解情况:显然每一列数字种类数不能超过\(3\),并且每个\(3x3\)的九宫格上不能出现相同的数字。
剩下未知的数字可以做自由分配,可直接用组合数来计算(式子见官解)。这样就将每一列的数字种类分配好了,最后对每一列的未知位置全排列计算方案数即可。具体细节见官解。
code