20200906 day1 模拟(一)

1

题意简述

\(A,B\)构成的一个长为\(T\)序列,给定\(M,N\)表示每次将恰好\(A\)\(M\)\(B\)\(N\)变为\(Z\),且每次操作所改变的\(A,B\)之间不能有\(Z\),求将所有字母改变为\(Z\)的方案与否。

题解

首先特判\(M=0,N=0\)
结论:当且仅当\(kM\)\(A\)\(kN\)\(B\)时有合法方案,其余情况无合法方案。

证明
\(k=1\)时显然。(即一次性可改变所有字母)
\(k>1\)时,将整个序列划分为每段长\(K\),共\(s\)段的子序列,其中\(K=M+N,Ks=T\)
\([1,K],[K+1,2K],...\)中,至少有一个子序列\(\alpha\)\(\leq M\)\(A\),至少有一个子序列\(\beta\)\(\geq M\)\(A\)
在长度\(K\)的“窗口”从第1位开始向右移动时,总会从序列\(\alpha\)移动到序列\(\beta\),且每次移动时区间内的\(A\)的数量\(D\)只可能\(+1,-1,0\)三种变化情况。(*)
所以在这之间的某一个区间一定满足\(D=M\),且该区间连续,可以把他删除。以此递归,可证。

(*)设区间\(A[BBAB]A\),窗口向右滑动时,多\(1\)\(A\)\(1\)\(B\)\(A\)的数量变化是\(+1\);设区间\(A[ABAB]A\),窗口向右滑动时,多\(1\)\(A\)\(1\)\(A\)\(A\)的数量变化是\(0\),同理区间\(A[BABB]B\);设区间\(A[ABAB]B\),窗口向右滑动时,多\(1\)\(B\)\(1\)\(A\)\(A\)的数量变化是\(-1\)

用栈维护从\(1\)到第\(J\)\(A\)的个数\(sum[J]\),如果某段区间有恰好\(M\)\(A\)(即\(sum[top]-sum[top-N-M]=N\)),则该区间合法。倒序输出。

2

3

题意简述

4

posted @ 2020-09-06 15:42  刘子闻  阅读(78)  评论(0编辑  收藏  举报