社区讨论
字典树模板题求条(悬赏关注)
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 条回复,欢迎继续交流。
正在加载回复...