记录编号 589928 评测结果 AAAAAAAAAA
题目名称 单词默写 最终得分 100
用户昵称 Gravatarwdsjl 是否通过 通过
代码语言 C++ 运行时间 1.319 s
提交时间 2024-07-08 17:43:54 内存使用 123.25 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 700100;

int tot,trie[N][30],sum[N],n,m,res[N],cnt;

struct node{
    int idx;
    int l;
    int ci;
    string wo;
}a[N];

void insert(string s){
    int len=s.size(),p=0;
    for(int i=0;i<len;i++){
        int c=s[i]-'a';
        if(!trie[p][c])trie[p][c]=++tot;
        p=trie[p][c];
        sum[p]++;
//        cout<<p<<"+++"<<s[p]<<endl;
    }
}

int ask(string s){
    int len=s.size(),p=0;
    for(int i=0;i<len;i++){
        int c=s[i]-'a';
        if(trie[p][c]==0)return 0;
        p=trie[p][c];
    }
//    cout<<"???"<<p<<" "<<s[p]<<"TTTTT"<<endl;
    return sum[p];
}

bool cmp(node x,node y){
    if(x.ci==y.ci)return x.l<y.l;
    return x.ci>y.ci;
}

int main(){
    freopen("engzam.in","r",stdin);
    freopen("engzam.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        cin>>a[++cnt].wo;
        scanf("%d",&a[cnt].ci);
        a[cnt].l=1; 
    }
    for(int i=1;i<=m;i++){
        a[++cnt].idx=i;
        cin>>a[cnt].wo;
        scanf("%d",&a[cnt].ci);
        a[cnt].l=2; 
    }
    //    cout<<"TTT"<<endl;
        sort(a+1,a+1+cnt,cmp);
        for(int i=1;i<=cnt;i++){
//        cout<<a[i].wo<<endl;
//          cout<<a[i].l<<" "<<a[i].wo<<' '<<a[i].ci<<endl;
        if(a[i].l==1)insert(a[i].wo);
        else res[a[i].idx]=ask(a[i].wo);
    }
    for(int i=1;i<=m;i++){
        printf("%d\n",res[i]);
    }
//    cout<<endl<<endl;
//    for(int i=1;i<=tot;i++){
//        cout<<trie[i][0]<<" "<<trie[i][1]<<" "<<trie[i][2]<<endl;
//          cout<<s[i]<<endl;
//    } 
    return 0;
}