P1481 魔族密码

点击查看代码
#include<bits/stdc++.h>

using namespace std;

const int N=100010;
int son[N][26],idx;
int n,cnt[N];
char str[N];
string op;

void insert(char *str)
{
    int p=0;
    for(int i=0;str[i];i++){
        int u=str[i]-'a';
        
        if(!son[p][u]) son[p][u]=++idx;
        
        p=son[p][u];
    }
    
    cnt[p]++;
}

int query(char *str)
{
    int p=0;
    for(int i=0;str[i];i++){
        int u=str[i]-'a';
        
        if(!son[p][u]) return 0;
        
        p=son[p][u];
    }
    
    return cnt[p];
}

int main()
{
    cin>>n;
    while(n--){
        cin>>op;
        cin>>str;
        if(op=="I") insert(str);
        else printf("%d\n",query(str));
    }
    
    return 0;
}
简简单单的模板题,稍微在原来的基础上做了修改,变成了求有前缀相同的单词个数了,只需要在移动到每一个字母的时候加一下cnt[p]即可,最后一个单词不会被统计,需要手动加1
posted @ 2025-11-30 11:06  gosaky  阅读(0)  评论(0)    收藏  举报