tg 49
还是日本题
这个是网赛题,来源:
\(Atcoder\space Regular\space Contest\space 125\&126\)
打的都是\(C\&D\)
还是只能说是自己思维的问题
这一场垫了也怪不得别人
T1
构造,方式如下
对于每个\(a_i,i\in[1,k)\)
直接插一个小于\(a_i\)的数即可,
要尽可能小保证字典序尽可能小
对于\(a_k\)就是直接倒序填所有的数
证明考虑数学归纳:
起点\(a_k,k=1\)的时候仅有一个倒序的排列符合
考虑加进去一个数\(a_{k-1}\),
那么比较显然的就是小于\(a_{k-1}\)的必然不会放在最开头
否则就会形成一个长度\(k+1\)的上升子序列,于是就不合法了
所以显然最一开头就是\(a_{k-1}\)
然后找一个合法并且字典序最小的,直接填\(1\)即可
这个时候合法必然要保证填数是小于\(a_{k}\),否则直接填\(a_k\)
于是剩下的局面就是\(k-1\)的,保证字典序最小递归构造即可
T2
计数,考虑\(DP\)
\(f_i\)就是选上位置\(i\)以后所有方案数
然后就是\(f_i=\sum\limits^{i-1}_ {j=last_{a_i}} f_j, last_{a_i}\)表示\(a_i\)上一次出现的位置,没有就是\(0\)
如果\(last_{a_i}=0\)还额外注意一下只选自己是合法的
在\(i\)位置\(f_i\)再加个\(1\)
优化一下树状数组前缀和即可
然后注意要扣掉\(last_{a_{i}}\)位置的\(f\)避免算不合法状态
就是可能会有选一个元素在\(a_i\)和\(last_{a_i}\)都可以选的话是不合法的
T3
事实上这种是套路
考虑把一个数\(x\)变成答案所需要的步数是否小于\(k\)
记\(sum=\sum\limits^{n}_ {i=1}a_i,max=max(a_i),i\in[1,n]\)
\(1.n\cdot max-sum>k\)
这个时候就比较无能为力,\(x\)只能在\([1,max]\)里
\(2.n\cdot max-sum\leq k\)
这个时候,\(x\)和次数之间就有单调性了
由单调性可得\(x=max+\lfloor \frac{k-n\cdot max+sum}{n} \rfloor\)
考虑\(1\)情况下怎么做
枚举\(x\)即可
开桶记录\([(k-1)\cdot x,k\cdot x],k\in[1,\lceil \frac{max}{k} \rceil]\)里数出现的次数\(cnt\)及和\(sum\)
对于每一个\(k\),这一段的总次数\(now\)就是\(cnt\cdot k\cdot x-sum\)
所有的\(now\)累加一下看如果不大于\(k\)就是合法的
时间复杂度算调和级数是\(O(n\log n)\)的
T4
\(k\) 这么小,考虑状压
\(dp(i,s)\) 表示考虑到第 \(i\) 个位置,已经选择集合(已排序)为 \(s\),最少移动次数
\(i\)如果选,那么就会对答案贡献逆序对,
如果不选,为了让两边的集合就会跨过 \(i\)跑到一起,贡献左右集合 \(size\) 的较小值

浙公网安备 33010602011771号