hdu 1251 统计难题

本文介绍了一种使用Trie树(字典树)来高效处理字符串集合的方法,特别关注于如何通过Trie树的节点来记录字符串的出现次数,并实现字符串的插入、查找及前缀统计等功能。

主题思想 : Tries , 在每个非空节点,记录经过它的字符串的个数。
核心方法是 Tries 的put ,get 和collect 方法。

const int R=26;

struct Node{

    int val=0;
    Node* next[R];
    Node(){
        val=0;
        //very import 
        memset(next,NULL,sizeof(next));
    }
};
Node* root;

int ans=0;

void put(char key[]){

    Node *x=root;
    int d=0;
    char c;
    while(d<strlen(key)){
        char c=key[d];
        if(x->next[c-'a']==NULL){
            x->next[c-'a']=new Node();
        }
        x=x->next[c-'a'];
        x->val++;
        d++;
    }
}
Node* get(char key[]){

    Node *x=root;
    int d=0;
    char c;

    while(x!=NULL){

        if(d==strlen(key)) {
            return x;
        }
        c=key[d];

        x=x->next[c-'a'];
        d++;
    }

    return NULL;
}
int collect(Node *x){

    ans=0;
    if(x==NULL) return 0;
    ans+=x->val;
}
void prefix(char key[]){

    ans=0;
    collect(get(key));
}

,本来报RE ,,结果使用memest 语句 对Node* 数组 next 进行了初始化,就不报错了。

AC代码:

#include <iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
using namespace std;

const int R=26;

struct Node{

    int val=0;
    Node* next[R];
    Node(){
        val=0;
        //very import 
        memset(next,NULL,sizeof(next));
    }
};
Node* root;

int ans=0;

void put(char key[]){

    Node *x=root;
    int d=0;
    char c;
    while(d<strlen(key)){
        char c=key[d];
        if(x->next[c-'a']==NULL){
            x->next[c-'a']=new Node();
        }
        x=x->next[c-'a'];
        x->val++;
        d++;
    }
}
Node* get(char key[]){

    Node *x=root;
    int d=0;
    char c;

    while(x!=NULL){

        if(d==strlen(key)) {
            return x;
        }
        c=key[d];

        x=x->next[c-'a'];
        d++;
    }

    return NULL;
}
int collect(Node *x){

    ans=0;
    if(x==NULL) return 0;
    ans+=x->val;
}
void prefix(char key[]){

    ans=0;
    collect(get(key));
}


int main()
{
    root=new Node();

    char s[15];
    int n=0;
    while(gets(s)){
        if(strcmp(s,"")==0)break;
        n++;
        put(s);
    }

    while(gets(s)){
        prefix(s);
        printf("%d\n",ans);
    }
    return 0;
}
内容概要:本文档为集成系统平台通用验收方案的经典模板,系统阐述了项目验收的全过程,涵盖验收前提、标准、初步验收、上线试运行及最终验收等关键环节。重点包括验收准备、文档整理、售后服务交接、技术文档移交、上线切换与运行维护、问题处理机制以及项目总结与验收评审等内容,确保系统在功能、性能、稳定性等方面满足合同和技术要求,并实现平稳过渡与长期稳定运行。文档强调交付物完整性、多方协作及后续支持机制,保障项目顺利收尾并进入质保期。; 适合人群:从事系统集成、软件实施、项目管理及相关技术支持工作的专业人员,尤其是参与政府或企业信息化建设项目的技术负责人、项目经理、运维人员及验收评审人员。; 使用场景及目标:①用于指导大型信息系统建设项目在部署后的验收流程设计与执行;②帮助项目团队规范交付文档、理清验收步骤、落实售后服务衔接;③支撑甲乙双方依据合同和标准完成上线试运行、初步验收和最终验收,确保项目合规闭环。; 阅读建议:此模板具有较强的实务性和可操作性,使用者应结合具体项目背景进行裁剪和补充,重点关注验收标准、文档清单和服务交接机制,在实际应用中同步完善问题台账、运维手册和培训记录,提升项目交付质量与客户满意度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值