题意:给你一个初始串和一个最终的串,每一次操作是,将最后len个字符取出,然后这len的字符翻转(reverse),然后放到最前面,求如何能够通过初始串,获得终串。
题解:因为串长是2000,操作个数不超过6100,所以能想到的是,我们可以将字符一个一个找出来拼接上去,每一次拼接操作最多3次。
假设已经拼接好的串的开头是L,结尾是R
第一种情况 下一个字符在L之前:
那我们可以通过如下三个操作拼接:
shift(n-j-1)
shift(1)
shfit(n-r)
就可以将next拼接到R上。
第二种情况 下一个字符在R之后:
那我们可以通过如下三个操作拼接:
shift(n-j-1)
shfit(n)
shfit(n-r)
将next拼接到R上。
所以一同(n-1)*3个操作。
AC代码:
#include<stdio.h>
#include<vector>
#include<algorithm>
#include