B
有个跟官方题解不同的,稍微讲一下
对于一个生成的矩阵(R imes C),由少一行或少一列的矩阵转移过来是有重复的
令(f_{i,j})为有多少个(i imes j)的矩阵:
[f_{i,j}=f_{i-1,j} imes j+f_{i,j-1} imes i-f_{i-1,j-1} imes(i-1)(j-1)
]
C
看清楚题意
D
首先来思考给定(T),询问(S)是否可以生成
令(S')为(S)的最长后缀使得其为(T)的子序列,显然这部分是可以不动的,那么我们仅需判断(S_{1...|S|-|S'|})能否进行操作获得(T_{1...|T|-|S'|})中(0/1)数量
考虑若已知(S_{1...i})进行操作能获得(0/1)数量分别为(j,k),那么要做的就是(S_{i+1...|S|})中通过插入(0/1)的数量为(j,k)能生成多少个字符串
为了不重复计数,要使得(S_{i,i+1})间插入的数与(S_i)不同,(S_{i+1,i+2})间插入的数与(S_{i+1})不同...(S_{|S|})后插入的数与(S_{|S|})不同
E
令(x,y)分别为(A_i)最小与最大的
结论1:若(2A_x<A_y),则无解
证明:
考虑最后的序列单独提出(x,y),发现会出现首尾连续出现两次,或中间连续出现三次的情况,不合法
推论1:若(2A_xle A_y),则有解
证明:
通过结论1的证明,不难发现通过大的数连续出现两次,以使得合法
考虑贪心的填数,这里不同于有些贪心的题是一个一个填数。
为方便考虑,在保证已填好的序列中最后(k)个是个置换的情况下,然后枚举新填的序列长度(len)。
然后判断填好后是否可行,这里不同于空序列判解:
令(mi=A_x,mx=A_y)
若(2A_x+1=A_y),需要满足前面一个排列(A_i=mx)的全部排在(A_i=mi)的前面