码迷,mamicode.com
首页 > 其他好文 > 详细

PAT A1022 Digital Library (30分)

时间:2020-09-11 15:57:02      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:过程   ima   系统   auth   oid   main   存储   排列   type   

技术图片
技术图片
题型分类:map
题目大意:输入一本书的各个数据,建立图书查询系统,最后对书目进行查询。
解题思路:使用map来映射书和书的各个数据,用set来存储书的编号,set可以自动去重并且按从小到大的顺序排列
注意
1.由于id是一个七位数字,在用scanf("%d",&id)读入是0001111会变成1111即自动完成了去零过程,所以输出时需要进行printf("%07d",id)即完成补0操作
2.getchar可以读入换行符防止getline读入一个已经结束的一行此时得到的是一个空数组;
3.尽量把查询的东西设置为一样的方便使用同样的query函数进行查询,在此题中需要使用引用来读入是为了减少数据复制的时间,防止最后一组数据超时;

#include <cstdio>
#include <map>
#include <set>
#include <iostream>
#include <string>
using namespace std;
map<string , set<int> > mpTitle,mpAuthor,mpKey,mpPub,mpYear;

void query(map<string ,set<int> > &mp, string &str){//不使用引用容易超时
    if(mp.find(str) == mp.end()) printf("Not Found\n");
    else{
        for(set<int>::iterator it = mp[str].begin();it!=mp[str].end();it++){
            printf("%07d\n",*it);
        }
    }
}

int main(){
    int n,m,id,type;
    string title,author,key,pub,year;
    scanf("%d",&n);
    for(int i = 0;i<n;i++){
        scanf("%d",&id);
        char c = getchar();//接收掉id后面的换行
        getline(cin,title);
        mpTitle[title].insert(id);
        getline(cin,author);
        mpAuthor[author].insert(id);
        while(cin >> key){
           mpKey[key].insert(id);
           c = getchar();
            if(c == ‘\n‘) break;
       }
        getline(cin,pub);
        mpPub[pub].insert(id);
        getline(cin,year);
        mpYear[year].insert(id);        
    }
    
    string temp;
    scanf("%d",&m);
    for(int i =0;i<m;i++){
        scanf("%d: ",&type);
        getline(cin,temp);
        cout<<type<<": "<<temp<<endl;
        if(type==1) query(mpTitle,temp);
        else if(type==2) query(mpAuthor,temp);
        else if(type==3) query(mpKey,temp);
        else if(type==4) query(mpPub,temp);
        else query(mpYear,temp);
    }
    return 0;
}

PAT A1022 Digital Library (30分)

标签:过程   ima   系统   auth   oid   main   存储   排列   type   

原文地址:https://www.cnblogs.com/shuibeng/p/13587405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!