Logo zibenlun 的博客

博客

很简单

...
zibenlun
2025-12-01 12:58:16
分块好啊

本文章由 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;
}

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。