• HDU1251统计难题map+输入


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

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

    注意:本题只有一组测试数据,处理到文件结束.
    Output对于每个提问,给出以该字符串为前缀的单词的数量.
    Sample Input

    banana
    band
    bee
    absolute
    acm
    
    ba
    b
    band
    abc

    Sample Output

    2
    3
    1
    0


    题意:

    输入以该字符串为前缀的单词的数量。


    注意输入:

    scanf 以空格、换行符结束输入;

    scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中)

    gets 是读取换行符的,不过它会把换行符转换为'\0'

    gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;

    在数据大量的情况下,用gets读取快于scanf()10倍以上

    scanf不能接受空格、制表符Tab、回车等;

    而gets能够接受空格、制表符Tab和回车等。将接收输入的整个字符串直到遇到换行为止。

     1 #include<stdio.h>
     2 #include<map>
     3 #include<iostream>
     4 #include<string.h>
     5 using namespace std;
     6 typedef long long ll;
     7 const int x=131;
     8 const int N=1e6+20;
     9 ll book[N];
    10 
    11 map<string,ll>mp;
    12 char a[15];
    13 
    14 int main()
    15 {
    16     //string a;
    17     while(1)
    18     {
    19        // cin>>a;
    20        gets(a);
    21 //        if(a[0]=='\0')    
    22 //            break;
    23         int len=strlen(a);
    24         if(len==0)
    25             break;
    26         string s;
    27         s.clear();
    28         for(int i=0;i<len;i++)
    29         {
    30            // sum=sum*x+a[i];
    31             s+=a[i];
    32             mp[s]++;
    33         }
    34     }
    35 
    36     while(cin>>a)
    37         cout<<mp[a]<<endl;
    38     return 0;
    39 }
  • 相关阅读:
    2019 ECfianl
    Codeforces Round #610 (Div. 2)
    IOS设计模式之三:MVC模式
    MVC3快速搭建Web应用(二)
    IOS设计模式之四:观察者模式
    MVC3快速搭建Web应用(一)
    Three20 NetWork
    IOS设计模式之一:单例模式
    IOS设计模式之二:Delegate模式
    写博客的意义
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11867151.html
Copyright © 2020-2023  润新知