60pts wa on#7-10
查看原帖
60pts wa on#7-10
807042
lovely_aris楼主2025/8/3 21:53
#include<bits/stdc++.h>
using namespace std;
int n,ans;
char vir[1010],vl,p[1010];
int d[128];
int tr[500010][7],cnt,sum[500010];
void insert(char p[]){
	int l=strlen(p+1),k=0;
	for(int i=1;i<=l;i++){
		int now=d[p[i]];
		if(!tr[k][now]) tr[k][now]=++cnt;
		k=tr[k][now];
	}
	sum[k]++;
}
bitset<1010>t[500010];
void dfs(int st,int k){
	if(t[k][st]) return;
	t[k][st]=1;
	if(st>vl){
		ans+=sum[k];
		return;
	}
	if(vir[st]=='*'){
		dfs(st+1,k);
		for(int i=1;i<=4;i++){
			int now=i;
			if(tr[k][now]){
				dfs(st+1,tr[k][now]);
				dfs(st,tr[k][now]);
			}
		}
	}
	else if(vir[st]=='?'){
		for(int i=1;i<=4;i++){
			int now=i;
			if(tr[k][now]) dfs(st+1,tr[k][now]);
		}
	}
	else{
		int now=d[vir[st]];
		if(tr[k][now]) dfs(st+1,tr[k][now]);
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	d['A']=1;d['G']=2;d['T']=3;d['C']=4;d['?']=5;d['*']=6;
	cin>>(vir+1);
	vl=strlen(vir+1);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>(p+1);
		insert(p);
	}
	dfs(1,0);
	cout<<n-ans;
	return 0;
}
2025/8/3 21:53
加载中...