省流:自己看完。
Day 0
甚至要到了体锻,但是不出所料,上高一后就很少人踢球了,爽但不太爽。
听到学弟问要不要背快读模板,感觉根本背不下来,而且大概也没用吧(伏笔
Day 1
终于不用早起了,但是还是睡到 8:00 就不想睡了。早上在复习板子,被教练看见了,于是就有了:
伏笔)
中午看了 J 的题目,为什么我不参加就这么简单,学长 AK 后玩 Ukraine 方块被抓包了?
中午直接睡到 14:10 才起来(为什么我的闹钟没响?)。问监考能不能带水杯进去,他说:《喝一口就行》,所以是怕我带炸药进考场???
密码输的最快的一次,开 T1,然后回了,但怎么有点像反悔贪心?写写写,本地跑 1s+?为什么 5 × 1 0 5 5\times10^5 5 × 1 0 5 个整数不给快读?把堆改成排序就更快了,现在是真怕 T1/T2 被卡常。
开 T2,直接保留最小生成树做就行了,先写了 O ( n 2 k log n α ( n ) ) \mathcal O(n2^k\log n\alpha(n)) O ( n 2 k log n α ( n ) ) ,要跑 1.6s。为什么 3 × 1 0 6 , 1 s 3\times 10^6,1s 3 × 1 0 6 , 1 s 都不下发快读???CCF 不会默认大家都会 fread 吧。再看一下归并可以少一只 log,写写写,为什么少一只 log 还要跑 1s?丢了。
开 T3,感觉不太会做,推了一下性质发现只要会快速做两个有多少个 x i ∈ A , y i ∈ B x_i\in A,y_i\in B x i ∈ A , y i ∈ B 即可,但这很明显不能快速做吧。然后就开始乱想了,中途甚至会根号分治做 O ( L n ) \mathcal O(L\sqrt n) O ( L n ) ,但是为什么这和 O ( L n ) \mathcal O(Ln) O ( L n ) 一个分???计算后发现 O ( n L ) \mathcal O(n\sqrt L) O ( n L ) 可以过,然后就磕了一场的根号,然后就寄了。AB 性质一共打了 7kb+,考场直接被调红温了。
T4 提前看了,排列计数一看就不会做,最后 15min 极限拿下 24pts。虚拟机过编后都来不及测大样例就结束了。(为什么 14:30 发的密码监考员说 14:27 就开始了,一定要 18:27 结束,CCF 是差 3min 赶晚高峰吗???)
赛后遇见 yhm 问 zlt 2h 有没有 AK,直接自闭了。mlk 觉得自己好帅,然后就 AK 了。
估分:100 + 100 + 70 + 24 = 294 100+100+70+24=294 1 0 0 + 1 0 0 + 7 0 + 2 4 = 2 9 4 。
Day 5
T3 没判 ∣ t 1 ∣ ≠ ∣ t 2 ∣ |t_1|\ne |t_2| ∣ t 1 ∣ = ∣ t 2 ∣ ,自闭了。
申诉查分???
100 + 100 + 50 + 24 = 274 100+100+50+24=274 1 0 0 + 1 0 0 + 5 0 + 2 4 = 2 7 4 。
Day 6
T3 ∣ t 1 ∣ ≠ ∣ t 2 ∣ |t_1|\ne |t_2| ∣ t 1 ∣ = ∣ t 2 ∣ 没被卡,但是 maxl \operatorname{maxl} m a x l 开成 maxn \operatorname{maxn} m a x n 了,坠。
原来 T3 放到两棵 Trie 上就从 x i ∈ A , y i ∈ B x_i \in A,y_i \in B x i ∈ A , y i ∈ B 变成 x i ∈ [ l 1 , r 1 ] , y i ∈ [ l 2 , r 2 ] x_i\in [l_1,r_1],y_i\in [l_2,r_2] x i ∈ [ l 1 , r 1 ] , y i ∈ [ l 2 , r 2 ] ,就可以二维数点了,这么笨可以滚了。
无敌坦克手贝塔获得成就:max ( CSP-S 2025 ) − min ( CSP-S 2025 ) = 3 \max(\text{CSP-S 2025})-\min(\text{CSP-S 2025})=3 max ( CSP-S 2025 ) − min ( CSP-S 2025 ) = 3 。
replace 题解:
手玩一下可以证明,将 ( s i , 1 , s i , 2 ) (s_{i,1},s_{i,2}) ( s i , 1 , s i , 2 ) 定义成 ( a i , b i , b i ′ , c i ) (a_i,b_i,b'_i,c_i) ( a i , b i , b i ′ , c i ) ,其中 a i a_i a i 为 L C P ( s i , 1 , s i , 2 ) LCP(s_{i,1},s_{i,2}) L C P ( s i , 1 , s i , 2 ) ,c i c_i c i 为 L C S ( s i , 1 , s i , 2 ) LCS(s_{i,1},s_{i,2}) L C S ( s i , 1 , s i , 2 ) ,a i + b i + c i = s i , 1 , a i + b i ′ + c i = s i , 2 a_i+b_i+c_i=s_{i,1},a_i+b'_i+c_i=s_{i,2} a i + b i + c i = s i , 1 , a i + b i ′ + c i = s i , 2 ,同理将 ( t i , 1 , t i , 2 ) (t_{i,1},t_{i,2}) ( t i , 1 , t i , 2 ) 定义成 ( A i , B i , B i ′ , C i ) (A_i,B_i,B'_i,C_i) ( A i , B i , B i ′ , C i ) ,则能将 t j , 1 t_{j,1} t j , 1 通过 ( s i , 1 , s i , 2 ) (s_{i,1},s_{i,2}) ( s i , 1 , s i , 2 ) 替换成 t j , 2 t_{j,2} t j , 2 当且仅当 a i a_i a i 为 A j A_j A j 的后缀,b i = B j , b i ′ = B j ′ b_i=B_j,b'_i=B'_j b i = B j , b i ′ = B j ′ ,c i c_i c i 为 C j C_j C j 的前缀。
b i = B j , b i ′ = B j ′ b_i=B_j,b'_i=B'_j b i = B j , b i ′ = B j ′ 的限制好做,直接将所有 ( b i , b i ′ ) (b_i,b'_i) ( b i , b i ′ ) 哈希后存在一起,查询时找到对应的集合即可。剩下两个限制不能直接做,前缀后缀可以考虑建出两棵 Trie 树,限制就变为了求有多少个位置在第一棵 Trie 上一个子树内,在第二棵 Trie 上为当前点的祖先,然后使用 dfs 序即可转成二维数点,在第二棵 Trie 上 dfs,用树状数组记录第一棵的区间点数。时间复杂度为 O ( L 1 + L 2 + ( n + q ) log n ) \mathcal O(L1+L2+(n+q)\log n) O ( L 1 + L 2 + ( n + q ) log n ) ,空间 O ( ( L 1 + L 2 ) ∣ ∑ ∣ ) \mathcal O((L1+L2)|\sum|) O ( ( L 1 + L 2 ) ∣ ∑ ∣ ) .
employ 题解:
对排列计数肯定不能直接做,先记录 f i , j f_{i,j} f i , j 表示面试了 i i i 个人有 j j j 个人没有录用的方案数,则目前的人可以分成 c i ≤ j c_i\le j c i ≤ j 和 c i > j c_i>j c i > j 的人,尝试直接记录在状态内。重设状态 f i , j , k f_{i,j,k} f i , j , k 表示面试了 i i i 个人有 j j j 个没有录用,c p > j c_p>j c p > j 的共有 k k k 个人的方案数(c p > j c_p>j c p > j 的无需记录位置和具体取的值,即延后钦定,这里后面会解释)。
若 s i + 1 = 0 s_{i+1}=0 s i + 1 = 0 ,此时的 j ← j + 1 j\gets j+1 j ← j + 1 ,k k k 会减去前面选中的 c = j + 1 c=j+1 c = j + 1 的个数,这里考虑直接枚举 l l l 表示前面的人中有 l l l 个 c p = j + 1 c_p=j+1 c p = j + 1 。这里就解释了为什么要延后钦定,因为如果直接在加入时就选择他的位置和值,现在就会算重和算错。这里需要给 l l l 个人钦定位置和值,所以乘上 ( c n t j + 1 l ) ( k l ) l ! \binom{cnt_{j+1}}{l}\binom{k}{l}l! ( l c n t j + 1 ) ( l k ) l ! 的系数,转移如下:
{ f i + 1 , j + 1 , k − l + 1 ← f i , j , k ( c n t j + 1 l ) ( k l ) l ! 当前 i + 1 选择 c > j + 1 f i + 1 , j + 1 , k − l ← f i , j , k ( c n t j + 1 l ) ( k l ) l ! ( p r e j + 1 − i + k − l ) 当前 i + 1 选择 c ≤ j + 1 \begin{cases}
f_{i+1,j+1,k-l+1}\gets f_{i,j,k}\binom{cnt_{j+1}}{l}\binom{k}{l}l! & \text{当前 }i+1\text{ 选择 } c>j+1\\
f_{i+1,j+1,k-l} \gets f_{i,j,k}\binom{cnt_{j+1}}{l}\binom{k}{l}l!(pre_{j+1}-i+k-l) & \text{当前 }i+1\text{ 选择 }c\le j+1
\end{cases}
{ f i + 1 , j + 1 , k − l + 1 ← f i , j , k ( l c n t j + 1 ) ( l k ) l ! f i + 1 , j + 1 , k − l ← f i , j , k ( l c n t j + 1 ) ( l k ) l ! ( p r e j + 1 − i + k − l ) 当前 i + 1 选择 c > j + 1 当前 i + 1 选择 c ≤ j + 1
然后 s i + 1 = 1 s_{i+1}=1 s i + 1 = 1 的就类似了,注意若选择的 c > j ′ c>j' c > j ′ 时不用记录当前选数的方案数。
{ f i + 1 , j , k + 1 ← f i , j , k 当前 i + 1 选择 c > j f i + 1 , j , k + 1 ← f i , j , k ( c n t j + 1 l ) ( k l ) l ! ( p r e j − i + k ) 当前 i + 1 选择 c ≤ j \begin{cases}
f_{i+1,j,k+1} \gets f_{i,j,k} & \text{当前 } i+1 \text{ 选择 } c>j \\
f_{i+1,j,k+1} \gets f_{i,j,k}\binom{cnt_{j+1}}{l}\binom{k}{l}l!(pre_j-i+k) & \text{当前 } i+1 \text{ 选择 } c\le j
\end{cases}
{ f i + 1 , j , k + 1 ← f i , j , k f i + 1 , j , k + 1 ← f i , j , k ( l c n t j + 1 ) ( l k ) l ! ( p r e j − i + k ) 当前 i + 1 选择 c > j 当前 i + 1 选择 c ≤ j
最后记得求答案时需要给剩余的选定位置和值:
a n s = ∑ i = 0 n − m f n , i , n − p r e i ( n − p r e i ) ! ans=\sum_{i=0}^{n-m}f_{n,i,n-pre_i}(n-pre_i)!
a n s = i = 0 ∑ n − m f n , i , n − p r e i ( n − p r e i ) !