ICPC 沈阳 Problem C
Posted merodach
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICPC 沈阳 Problem C相关的知识,希望对你有一定的参考价值。
题意
求n的全排列中将前k个数排序后最长公共子序列>=n-1的个数
思考
我们先把最后可能产生的结果找出来,再找有多少种排列能构成这些结果
设排列为s
- S like 1,2,3,...,n , 个数=1
- S like 1,2,3, ... i-1, j, i, ... j-1, j+1, ...n
- 当j<=k时不存在
- 当j>k时, 个数= (j-1)-k+1=j-k
- 综上,个数=(Sigma_{j=k+1}^{n}j-k)
- S like 1,2,3,...i-1, i+1, ..j,i,j+1..n
- 当j<=k时,个数=n-(k+1)+1=n-k
- 当j>k时, 个数= n-(j+1)+1=n-j
- 综上, 个数=(k(n-k)+Sigma_{j=k+1}^{n}n-j)
- 但是 S like 1,2,3,...,i+1,i,...被重复计算了,个数=n-(k+1)+1=n-k
- 综上,结果数=1+k(n-k)+(n-k)^2-(n-k)=1+(n-1)(n-k)
又因为对于每种结果可以由k!个排列构成
所以最后答案是 [1+(n-1)(n-k)]k! , k<=n
以上是关于ICPC 沈阳 Problem C的主要内容,如果未能解决你的问题,请参考以下文章
2021ICPC(沈阳) - String Problem(后缀树+贪心)
2021ICPC(沈阳) - String Problem(后缀树+贪心)
2021ICPC(沈阳) - String Problem(后缀树+贪心)
2021 ICPC沈阳 M.String Problem(思维)