求调,30pts,rp++
  • 板块学术版
  • 楼主ilmex
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/9 11:50
  • 上次更新2024/8/9 13:45:30
查看原帖
求调,30pts,rp++
941580
ilmex楼主2024/8/9 11:50

题

#include<bits/stdc++.h>
using namespace std;
const int N=260010;
int n,m,g[N][26],t[N],u,c=1,r;
string s;
map<string,bool>p;
char x,y;
int q(string s){
	int u=1;
	for(int j=0; j<s.size(); j++){
		int v=s[j]-'a';
		u=g[u][v];
		if(!u)return 0;
	}
	return t[u];
}
int main(){
	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; i++){
		cin>>s;u=1;
		for(int j=0; j<s.size(); j++){
			int v=s[j]-'a';
			if(!g[u][v])g[u][v]=++c;
			u=g[u][v];
		}
		t[u]=1;
	}
	while(m--){
		cin>>s;r=0;
		if(q(s)){
			printf("-1\n");
			continue;
		}
		for(int i=0; i<26; i++){
			r+=q((char)(i+'a')+s);
			for(int j=2; j<=s.size(); j++){
				s.insert(j,1,i+'a');
				r+=q(s);
				s.erase(j,1);
			}
		}
		for(int j=0; j<s.size(); j++){
			char e=s[j];
			s.erase(j,1);
			if(q(s)&&!p[s])r++;
			p[s]=1;
			if(!j)s=e+s;
			else s.insert(j,1,e);
		}
		p.clear();
		for(int j=0; j<s.size(); j++){
			y=s[j];string::size_type pos=j;
			for(int i=0; i<26; i++){
				x=(char)(i+'a');
				if(x==y)continue;
				s.replace(pos,1,1,x);
				r+=q(s);
				s.replace(pos,1,1,y);
			}
		}
		printf("%d\n", r);
	}
	return 0;
}
2024/8/9 11:50
加载中...