• 歌词本 牛客小白月赛10


    链接:https://ac.nowcoder.com/acm/contest/280/J
    来源:牛客网
     

    题解: 模拟 用到map容器,map 是一种有序无重复的关联容器,内部是红黑树。

    需要注意的是,string类用printf输出的时候,格式是这样printf("%s",str.c_str());

    printf("%s",str); 是错误的。

    原因在于:printf("%s", str.c_str());
    printf里面要求是char*类型,string和char*是不一样的。

    这段代码加样例,简单解释上面所说

    signed main(){
        cin>>s;
        printf("%s ",s);
        cout<<s<<endl;
    }

     

    代码: 

    #include <iostream>
    #include <bits/stdc++.h>
    #include <cstdio>
    using namespace std;
    #define int long long
    /*map 是一种有序无重复的关联容器*/
    signed main(){
        ios::sync_with_stdio(0);
        map<string,int>mp;
        int a;
        string s;
        while(cin>>a){
            if(a==1){
                cin>>s;/*String是C++的,只能用cin读入的*/
                mp[s]++;
            }
            else if(a==2){
                cin>>s;
                if(mp[s]==0)
                    printf("Baka Miku, string "%s" doesn't exsit.
    ",s.c_str());
                else {
                    mp[s]--;
                    printf("String "%s" has been deleted once.
    ",s.c_str());
                }
            }
            else if(a==3){
                printf("----------
    ");
                printf("Miku's Lyrics Book:
    ");
                for(map<string,int>::iterator iter=mp.begin();iter!=mp.end();iter++){
                    for(int i=1;i<=iter->second;i++){
                        printf("%s
    ",(iter->first).c_str());
                    }
                }
                printf("----------
    ");
            }
            else if(a==4){
                cin>>s;
                if(mp[s]>=1){
                     printf("String "%s" is exsit, there is (are) %lld in the book.
    ",s.c_str(),mp[s]);
                }
                else
                    printf("String "%s" doesn't exsit.
    ",s.c_str());
            }
    
        }
        return 0;
    }
    

    题目描述

    众所周知,Miku家里有一本歌词本,今天她要从这本歌词本中选择几个单词构成一首新曲,然而这本歌词本又太厚了,她不想自己查找某个词是不是在歌词本里,并且她想找的歌词也不一定在歌词本里,这是她所不愿看到的,但是这又无法避免。
    Miku一边阅读着歌词本,一边向你询问,问你她读过的歌词中有没有出现过她给出的单词,并且她还会随时选出一些不满意的歌词删掉。要注意同一个歌词可能会重复出现多次。
    Miku还想随时查询这个歌词本里面有什么,以便印刷成词典。你的程序也要处理这种询问。

    输入描述:

    输入的每一行包含一个操作和至多一个字符串。
    若操作为1,则表示Miku念出了一句歌词,你需要将这句歌词插入到歌词本里。
    若操作为2,则表示Miku不满意这句歌词,要求你从歌词本里删除这句歌词。
    若操作为3,则表示Miku想将歌词本按字典序输出,以便印刷成词典。
    若操作为4,则表示Miku选出了一句歌词,询问你它是否在歌词本里出现过。
    输入以EOF(文件结束符,即您需要读取到输入文件末尾)结束。操作1、2、4均包含一个参数,为一个字符串,表示操作所需的字符串。
    请结合样例以便更好的理解题意。

    输出描述:

    输出的每一行表示操作的结果,我们规定:
    1. 对于所有将歌词添加到歌词本中的操作,不需要输出任何内容;
    2. 对于所有删除操作,若成功删除,则输出「String "%s" has been deleted once.」,若歌词不存在,则输出「Baka Miku, string "%s" doesn't exsit.」,输出中「%s」表示被删除的歌词;
    3. 对于所有按字典序输出歌词本的操作,请参考样例格式进行输出;
    4. 对于所有查询操作,若查询的歌词存在,则输出「String "%s" is exsit, there is (are) %d in the book.」,否则输出「String "%s" doesn't exsit.」,输出中「%s」表示给定的歌词,「%d」表示给定歌词的出现次数。

    示例1

    输入

    复制

    1 a
    1 a
    3
    4 a
    2 a
    2 c
    4 a
    4 c

    输出

    复制

    ----------
    Miku's Lyrics Book:
    a
    a
    ----------
    String "a" is exsit, there is (are) 2 in the book.
    String "a" has been deleted once.
    Baka Miku, string "c" doesn't exsit.
    String "a" is exsit, there is (are) 1 in the book.
    String "c" doesn't exsit.

    说明

    一开始歌词本里没有任何歌词。首先插入了两个「a」;然后按照字典序输出歌词本,输出两个「a」;查询「a」,很明显在歌词本中有两个「a」;删除一个「a」;删除「c」,因为「c」没有出现过,所以删除失败;查找「a」,此时歌词本中仅剩下一个「a」;查询「c」,明显的,「c」不存在。

    备注:

    
     

    输出描述中的直角引号“「”和“」”不需要输出,而输出描述中的半角引号需要原样输出。建议参考样例理解输入输出格式。
    数据保证总操作数量不超过 106,并且保证按字典序输出次数不超过 50,且保证标准程序输出的大小不超过 32 MiB。
    保证数据中只含有英文小写字母。且每个字符串长度不超过 10。
    请特别注意本题的 IO 量较大,请使用较为快速的 IO 方式。
    请注意本题的内存限制为 256 MiB,建议使用动态分配内存而不是静态开内存池以防止内存超限。
    本题不卡算法的时间复杂度的常数(时间限制为标程运行时间的两倍以上)。

  • 相关阅读:
    用windows脚本实现文件下载
    pku1325 Machine Schedule
    中位数
    pku1468 Rectangles
    最小密度路径
    合并序列
    PowerDesigner(5)转载
    责任链模式
    PowerDesigner(3)转载
    解释器模式
  • 原文地址:https://www.cnblogs.com/UUUUh/p/10284033.html
Copyright © 2020-2023  润新知