本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2023-08-23 12:37:40
思路
用动态数组记录下所有的字母的位置,每一次搜索到的字符都从记录的下标中找到距离最小的字符(直接循环遍历),如果没有记录就加上 $S$ 的长度。
超级简单的代码
主函数前三行没有太大用处可以不写。
#include<bits\/stdc++.h>
using namespace std;
string c;
vector<int> v[1005];
int n,m;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
cin>>c;
for(int i=0;i<c.size();i++)v[c[i]-'a'].push_back(i);
while(n--){
long long ans=0;
string s;
cin>>s;
for(int i=0;i<s.size();i++){
int minn=0x3f3f3f3f;
if(v[s[i]-'a'].size()==0){
ans+=s.size();
continue;
}
for(int j=0;j<v[s[i]-'a'].size();j++){
minn=min(minn,abs(v[s[i]-'a'][j]-i));
}
ans+=minn;
}
cout<<ans<<"\n";
ans=0;
}
return 0;
}

鲁ICP备2025150228号