2020-2021:teams:farmer_john:jjleo:codeforces_round_646_div._2
rank:93
A
B
C
D
题意:交互题。给定一个长度为$n$的序列$a$和$k$个两两没有交集的非空下标集合,每个集合有一个权值,等于除了该集合中下标对应的序列$a$中的元素以外$a$中其它元素的最大值。给出这$k$个集合,你可以询问不超过$12$次,每次询问$a$中任意个指定元素的最大值。最后要给出$k$个集合对应的权值。$(2 \leq n \leq 1000, 1 \leq k \leq n)$
题解:可以发现只有一个集合包含了全局最大值的下标(如果有多个最大值,随意挑一个当作全局最大值),那么其它集合对应的权值就是这个全局最大值。我们只需要二分出这个全局最大值的下标,然后询问一下对应的集合的最大值。正好全局$(1)$+二分$(10)$+最后询问一次$(1)$正好$12$次。需要注意不保证所有下标都出现在集合中,因此有可能全局最大值对应的下标不属于任何一个集合,这个时候所有权值就都是这个全局最大值了。
-
E
F
题意:给定两个长度为$n$的字符串$s$和$t$,每次可以选择一个区间将$s[l,l+1 \ldots r]$变成$s[r,l,l + 1 \ldots r - 1]$,求最少需要几步可以将$s$变成$t$,或判断无解。$(1\leq n \leq 2000)$
题解:这个操作等价于将某个字符移动到它左边的任意位置,为方便操作,我们将两个字符串翻转,这个操作变为将某个字符移动到它右边的任意位置。设$f_{i,j}$为$s[1..i]$和$t[1..j]$匹配需要的最少操作数,这里$i \ge j$,多余的部分移动到后面去了。转移分为三种:1.如果$s[i]=t[j]$,那么这一位可以直接匹配,即$f_{i,j}=f_{i-1,j-1}$。2.将$s[i]$移动到后面某一位,操作数我们在第三步转移算,即$f_{i,j}=f_{i-1,j}$。3.如果$t[j]$在$s[1..i]$的出现次数$\ge$在$t[1..j]$的出现次数,那么相当于有多余的$t[j]$移动到后面来了,因此可以使用这个多余的$t[j]$,此时进行了一次操作,因此$f_{i,j}=f_{i,j-1} + 1$。三种转移都取$min$即可。
2020-2021/teams/farmer_john/jjleo/codeforces_round_646_div._2.txt · 最后更改: 2020/06/25 23:34 由 jjleo