zoukankan      html  css  js  c++  java
  • HDU 1251 统计难题

    D - 统计难题
    Time Limit:2000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u

    Description

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). 
     

    Input

    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 

    注意:本题只有一组测试数据,处理到文件结束. 
     

    Output

    对于每个提问,给出以该字符串为前缀的单词的数量. 
     

    Sample Input

    banana band bee absolute acm ba b band abc
     

    Sample Output

    2 3 1 0
     
    爆内存代码
     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #define len strlen(s)
     6 using namespace std;
     7 typedef struct node{
     8     int v;
     9     node *next[26];
    10 }node;
    11 node root;
    12 int build(char *s){
    13     node *p=&root,*q;
    14     for(int i=0;i<len;i++){
    15         int id=s[i]-'a';
    16         if(p->next[id]==NULL){
    17             q=(node*)malloc(sizeof(root));
    18             q->v=1;
    19             for(int j=0;j<26;j++)
    20                q->next[j]=NULL;
    21             p->next[id]=q;
    22             p=p->next[id];
    23         }
    24         else{
    25             p->next[id]->v++;
    26             p=p->next[id];
    27         }
    28     }
    29 }
    30 int findt(char *s){
    31     node *p=&root;
    32     for(int i=0;i<len;i++){
    33         int id=s[i]-'a';
    34         p=p->next[id];
    35         if(p==NULL) return 0;
    36     }
    37     return p->v;
    38 }
    39 int main(){
    40     char str[15];
    41     for(int i=0;i<26;i++)
    42         root.next[i]=NULL;
    43     while(gets(str)&&str[0]!='')
    44        build(str);
    45     memset(str,NULL,sizeof str);
    46     while(~scanf("%s",str)){
    47         int ans=findt(str);
    48         printf("%d
    ",ans);
    49     }
    50     return 0;
    51 }
    代码
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 vector<string>vec[26];
     7 int cnt,flag=0;int len[26];
     8 string str;
     9 int main()
    10 {
    11     while(getline(cin,str)){
    12         int tmp=str[0]-'a';
    13         if(str==""){
    14             flag=1;
    15             for(int i=0;i<26;i++) len[i]=vec[i].size();
    16             continue;
    17         }
    18         if(!flag) vec[tmp].push_back(str);
    19         else{
    20             cnt=0;
    21           for(int i=0;i<len[tmp];i++){
    22             int len2=str.length(),j;
    23             for(j=1;j<len2;j++)
    24                 if(str[j]!=vec[tmp][i][j]) break;
    25                 if(j==len2) cnt++;
    26           }
    27           printf("%d
    ",cnt);
    28         }    
    29     }
    30     return 0;
    31 }
     
  • 相关阅读:
    [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger
    DOSbox汇编集成环境下的具体设置
    nginx的 CPU參数worker_processes和worker_cpu_affinity使用说明
    【数据压缩】LZW算法原理与源代码解析
    [javase学习笔记]-8.1 statickeyword之特点
    开源工作流CCBPM中关于解决谷歌等浏览器silverlight的问题
    “建议127:Lock与synchronized是不一样的问题”实际验证
    java线程同步问题——由腾讯笔试题引发的风波
    Centos6.5下安装protobuf及简单使用
    linux, configure --prefix=/有什么用
  • 原文地址:https://www.cnblogs.com/shenben/p/5459878.html
Copyright © 2011-2022 走看看