#include<bits/stdc++.h>
using namespace std;
int T,n;
string s,ss;
int sh[2][100005];
constexpr int M = 1e9 + 7;
constexpr int B = 233;
inline void get_hash(string s,int type) {
int res = 0;
for (int i = 0; i < n; ++i) {
sh[type][i]=res;
res = (long long)(res * B + s[i]) % M;
}
sh[type][n]=res;
}
int main(){
ios::sync_with_stdio(false);
cin>>T;
while(T--){
cin>>n>>s>>ss;
string ans="",anss="";
string s1="",s2="";
ans+=s[0];
int now=n;
int num=0;
for(int i=1;i<n;i++){
s1+=s[i];
s2+=ss[i-1];
}
for(int i=1;i<n;i++){
char ch=s[i],chh=ss[i-1];
if(ch>chh){
now=i;
break;
}
else if(ch==chh){
ans+=ch;
}
else if(ch<chh){
ans+=ch;
}
}
for(int i=now;i<=n;i++){
ans+=ss[i-1];
}
string dd="";
dd+=s;
dd+=ss[n-1];
for(int i=1;i<=n-1;i++){
anss+=ans[i];
}
if(dd==ans) num++;
get_hash(anss,0);
get_hash(s1,1);
int dodo=n-2;
for(int i=n-2;i>=0;i--){
if(s2[i]!=ans[i+1]) break;
if(sh[0][dodo]==sh[1][dodo]) num++;
dodo--;
}
memset(sh,0,sizeof sh);
cout<<ans<<"\n";
cout<<num<<"\n";
}
return 0;
}
n之和不超过2e5,请问为什么一直T?
我这个复杂度不是n之和吗?