这里有一个算法小白请求帮助(不会归并排序和map,才学没多久,请佬们谅解)大概就是我用字典树得到映射的数字后使用双指针去找答案,样列也通过了,但是最后只有10分
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,idx,x=1,son[N][100],cnt[N];
long long res;
vector<int>aft;
string str;
void insert(string &str)
{
int p=0;
for(int i=0;i<str.size();i++)
{
int j=str[i]-'A';
if(!son[p][j])son[p][j]=++idx;
p=son[p][j];
}
cnt[p]=x;
x++;
}
int query(string &str)
{
int p=0;
for(int i=0;i<str.size();i++)
{
int j=str[i]-'A';
if(!son[p][j])break;
p=son[p][j];
}
return cnt[p];
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){cin>>str;insert(str);}
for(int i=1;i<=n;i++){cin>>str;aft.push_back(query(str));}
for(int i=0,j=0;i<aft.size(),j<aft.size();)
{
while(aft[j]>=aft[i]&&j<aft.size())j++;
if(aft[j]<aft[i]&&j!=aft.size()){res+=j-i;i=j+1,j=i;}
}
cout<<res<<'\n';
return 0;
}