社区讨论

字典树模板题求条(悬赏关注)

P11412[EPXLQ2024 fall round] 风吹起了从前参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mj3qj5lt
此快照首次捕获于
2025/12/13 11:27
2 个月前
此快照最后确认于
2025/12/14 20:40
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 27;
const int M = 1e6 + 10;
int n,q,t[M][N],xx,cnt[M],ans[M];
struct str{
	int x,y;
	string s;
}s1[M];
struct str2{
	int x,po;
	string s;
}s2[M];
inline int num(char c){
	return (int)c - 'a';
}
inline int cmp(str x,str y){
	return x.x < y.x;
}
inline int cmp2(str2 x,str2 y){
	return x.x < y.x;
}
inline int build(){
	return ++xx;
}
inline void insert(string s,int v){
	int p = 0,l = s.size();
	for(int i = 0;i < l;++i){
		int c = num(s[i]);
		if(!t[p][c]){
			t[p][c] = build();
		}
		p = t[p][c];
		cnt[p] += v;
	}
}
inline int find(string s){
	int l = s.size(),p = 0;
	for(int i = 0;i < l;++i){
		if(!t[p][num(s[i])]) return 0;
		p = t[p][num(s[i])];
	}
	return cnt[p];
}
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);
	cin >> n >> q;
	for(int i = 1;i <= n;++i){
		cin >> s1[i].x >> s1[i].y >> s1[i].s;
	}
	sort(s1 + 1,s1 + n + 1,cmp);
	for(int i = 1;i <= q;++i){
		cin >> s2[i].x >> s2[i].s;
		s2[i].po = i;
	}
	sort(s2 + 1,s2 + q + 1,cmp2);
	s1[n + 1].x = 1e18;
	int pos = 1;
	for(int i = 1;i <= q;++i){
		while(s1[pos].x <= s2[i].x){
			insert(s1[pos].s,s1[pos++].y);
		}
		ans[s2[i].po] = find(s2[i].s);
	}
	for(int i = 1;i <= q;++i){
		cout << ans[i] << '\n';
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...