求最少需要几个s1串拼接存在子串s2 (1≤|s1|≤1e4,1≤|s2|≤1e6).
思路(感谢ZQC): 每个字母的出现位置存个vector. 假设你当前已经用了A串的前x个字符,现在想要匹配一个'x',那你就在'x'的vector那里二分出第一个大于x的位置, 如果匹配不到的话,就相当于需要一个新的串。#includeusing namespace std;typedef long long LL;vector xs[30];char s1[10010],s2[1000010];map mp; int main(){ int x,n,m,pos,ans,k; vector ::iterator y; scanf("%s%s",s1,s2); n=strlen(s1); for(int i=0;i