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;
    }
  • 相关阅读:
    [转]OllyDBG 入门系列(一)-认识OllyDBG
    .net连接Sql时出现"已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: TCP 提供程序, error: 0 指定的网络名不再可用。) "
    FCKeditor 2.0 的设置.修改.使用(转来的!)
    java中判断字符串是否数字的两种方法
    DATEDIFF 函数
    一个简单的数据库操作类
    Ajax多线程
    SQL Server应用程序中的高级SQL注入
    用ASP.NET开发三层架构【转载】
    下拉菜单选择头像
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5503089.html
Copyright © 2011-2022 走看看