早上
起来一看又上了60分,舒服了。
qcb题还被fst了,笑死。
花了一个小时才弄明白e题的思路,感觉挺巧妙地,cbb也tql
Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) E. Permutation Shift
题目大意
对于一个长度为n从1到n的序列a,我们可以将它向右移动k位,例:[1,2,3,4,5]右移2位后得到[4,5,1,2,3]
给出一个操作,选择i,j,交换序列中a[i]和a[j]的值。
现在给出一个序列b,问能否通过最多m次操作后,将b变成序列a移动k位后的序列
题目思路
根据偏移可以发现 偏移后序列p 中
p
i
=
(
i
−
k
)
m
o
d
n
pi=(i-k)mod n
pi=(i−k)modn
我们考虑将x序列转换成y序列的最小操作数
我们对比x序列和y序列,当
y
[
i
]
!
=
x
[
i
]
y[i]!=x[i]
y[i]!=x[i] 说明x[i]这个值要移动,并且y[i]也不再原位置,它要移回y[i]。
我们用并查集维护这个关系,我们最终的操作数就是,并查集中的数字个数-并查集中的环的个数
然后我们考虑怎么找k,题目要求我们最多m次操作恢复序列,那么b数组中至少有n-m*2个位置是满足题目条件的。又因为题目规定m<=n/3,那么满足条件的位置至少要有n/3个。
我们可以根据上面的偏移式子退出,所有点的偏移量x,并记录有多少个数的值等于x,如果这个数小于n/3,说明它一定不满足。相反的,当大于等于n/3时,我们再去计算他的操作数,如果操作数小于等于m的话,他就是我们的答案之一。
下午
终于给hdu第二场的入门dp补完了。。。
想补1011结果看了好久都没懂
然后就去看昨晚cf的f题了
晚上
看了一晚上f,终于搞明白咋做了,然后调bug一直调到十点,脑子都快宕机了,还有场div3。。。
然后div3就过了两题。。掉大分