zoukankan      html  css  js  c++  java
  • PAT A1022 Digital Library [输入输出 STL]

    题目描述

    链接
    模拟数字图书馆的查询功能。会给出n本书的信息,以及m个需要查询的命令,数字标号对应相应的命令,数字编号后面的字符串是查询的搜索词,要求输出这行命令以及输出满足条件的书的id,如果一个都没有找到,输出Not Found

    分析

    • 建立5个map,分别代表5个字符串到xx的映射。这个xx是什么呢?因为查询结果不唯一,所以至少是个数组,然后为了id自动排序,所以用set,故结构为map<string, set >
    • 输入输出问题(在其他博文里面总结过)!!!非常坑!!!
    • 建立query,通过传参的形式可以将不同的map名称统一化,先要判断map.find()和m.end()是否相等,如果不等再去遍历整个map,输出所有满足条件的id,如果相等就说明不存在这个搜索词对应的id,那么就要输出Not Found~
    • 传参一定要传引用!!!!!否则最后一点过不去
    • C++ 11里面,auto类型不是存储类型,而是自动推断类型,所以不用写map<string, set<int> >::iterator it
    #include<bits/stdc++.h>
    using namespace std;
    
    map<string, set<int> > title, author, keyword, pub, year;
    int n,id,q;
    string ttitle, tauthor, tkey, tpub, tyear;
    
    void query(map<string, set<int> > &m, string &str){  //坑点1,把查询抽象成一个函数
        if(m.find(str) != m.end()){
            for(auto it = m[str].begin(); it != m[str].end(); it++){ //坑点2,用auto
                printf("%07d
    ", (*it)); //坑点3:记住前导0!!!
            }
        }else{
            printf("Not Found
    ");
        }
    }
    
    int main(){
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&id);
            getchar(); //坑点4:记得getline前吸收
            getline(cin, ttitle);
            title[ttitle].insert(id);  //坑点5:使用这个结构map<string, set<int> >
            getline(cin, tauthor);
            author[tauthor].insert(id);
            while(cin>>tkey){  //坑点6:没有告诉关键词个数,同时后面还有输入的情况
                keyword[tkey].insert(id);
                char ch = getchar();
                if(ch == '
    ') break; //坑点6:没有告诉关键词个数,同时后面还有输入的情况
            }
            getline(cin, tpub);
            pub[tpub].insert(id);
            getline(cin, tyear);
            year[tyear].insert(id);
        }
        scanf("%d",&q);
        while(q--){
            scanf("%d: ",&id);  //坑点7:记得保持这个输入格式
            string qstr;
            getline(cin, qstr);  //坑点8:输入的字符串有空格,是整行
            cout<<id<<": "<<qstr<<endl;  //坑点9:坑点太多,忘记还要输出这个
            if(id == 1) query(title, qstr);
            else if(id == 2) query(author, qstr);
            else if(id == 3) query(keyword, qstr);
            else if(id == 4) query(pub, qstr);
            else if(id == 5) query(year, qstr);
        }
    
    
    }
    
    
  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/doragd/p/11316446.html
Copyright © 2011-2022 走看看