zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1022. Digital Library (30)

    简单模拟题。

    写的时候注意一些小优化,小心TLE。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<map>
    #include<queue>
    #include<vector>
    using namespace std;
    
    struct X
    {
        string id;
        char title[90]; int Title;
        char author[90]; int Author;
        vector<int>key;
        char publisher[90]; int Publisher;
        int year;
    }s[10000+10];
    int n,m;
    
    map<string,int>Tit,Aut,Key,Pub;
    vector<string>ans;
    int tot_Tit=0,tot_Aut=0,tot_Key=0,tot_Pub=0;
    
    bool cmp(const X&a,const X&b)
    {
        return a.id<b.id;
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            cin>>s[i].id; getchar();
            gets(s[i].title); if(Tit[s[i].title]==0) Tit[s[i].title]=++tot_Tit; s[i].Title=Tit[s[i].title];
            gets(s[i].author); if(Aut[s[i].author]==0) Aut[s[i].author]=++tot_Aut; s[i].Author=Aut[s[i].author];
            char tmp[1000]; gets(tmp);
            int len=strlen(tmp);
            string q;
            for(int j=0;j<=len;j++)
            {
                if(tmp[j]==' '||tmp[j]=='')
                {
                    if(Key[q]==0) Key[q]=++tot_Key;
                    s[i].key.push_back(Key[q]);
                    q.clear();
                }
                else q=q+tmp[j];
            }
            gets(s[i].publisher); if(Pub[s[i].publisher]==0) Pub[s[i].publisher]=++tot_Pub; s[i].Publisher=Pub[s[i].publisher];
            scanf("%d",&s[i].year);
        }
    
        sort(s+1,s+1+n,cmp);
    
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            char op[5]; scanf("%s",op); getchar();
            char h[100]; gets(h);
            printf("%s %s
    ",op,h);
    
            if(op[0]=='1')
            {
                int num=Tit[h];
                for(int i=1;i<=n;i++)
                    if(s[i].Title==num) ans.push_back(s[i].id);
            }
            else if(op[0]=='2')
            {
                int num=Aut[h];
                for(int i=1;i<=n;i++)
                    if(s[i].Author==num) ans.push_back(s[i].id);
            }
            else if(op[0]=='3')
            {
                int num=Key[h];
                for(int i=1;i<=n;i++)
                {
                    for(int j=0;j<s[i].key.size();j++)
                    {
                        if(s[i].key[j]==num)
                        {
                            ans.push_back(s[i].id);
                            break;
                        }
                    }
                }
            }
            else if(op[0]=='4')
            {
                int num=Pub[h];
                for(int i=1;i<=n;i++)
                    if(s[i].Publisher==num) ans.push_back(s[i].id);
            }
            else if(op[0]=='5')
            {
                int num=0;
                for(int i=0;h[i];i++) num=num*10+h[i]-'0';
                for(int i=1;i<=n;i++)
                    if(s[i].year==num) ans.push_back(s[i].id);
            }
            if(ans.size()==0) printf("Not Found
    ");
            else
            {
                for(int i=0;i<ans.size();i++) cout<<ans[i]<<endl;
                ans.clear();
            }
        }
        return 0;
    }
  • 相关阅读:
    Eclipse正确导入第三方project
    面试的基础_01字符串反向操作
    一个简单的实现了智能虚拟女友—图灵机器人
    Notepad++去除代码行号的几种方法
    fastjson将bean转成字符串时首字母变小写问题
    2015第34周二能收发邮件但不能打开网页解决方法
    2015第34周一
    2015第33周日
    2015第33周六
    构建自己的顾问团
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5503089.html
Copyright © 2011-2022 走看看