zoukankan      html  css  js  c++  java
  • 哈希——A

    哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助。 

    给你一部魔咒词典。当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能;当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒。如果他要的魔咒不在词典中,就输出“what?”

    Input

    首先列出词典中不超过100000条不同的魔咒词条,每条格式为: 

    [魔咒] 对应功能 

    其中“魔咒”和“对应功能”分别为长度不超过20和80的字符串,字符串中保证不包含字符“[”和“]”,且“]”和后面的字符串之间有且仅有一个空格。词典最后一行以“@END@”结束,这一行不属于词典中的词条。 
    词典之后的一行包含正整数N(<=1000),随后是N个测试用例。每个测试用例占一行,或者给出“[魔咒]”,或者给出“对应功能”。

    Output

    每个测试用例的输出占一行,输出魔咒对应的功能,或者功能对应的魔咒。如果魔咒不在词典中,就输出“what?”

    Sample Input

    [expelliarmus] the disarming charm
    [rictusempra] send a jet of silver light to hit the enemy
    [tarantallegra] control the movement of one's legs
    [serpensortia] shoot a snake out of the end of one's wand
    [lumos] light the wand
    [obliviate] the memory charm
    [expecto patronum] send a Patronus to the dementors
    [accio] the summoning charm
    @END@
    4
    [lumos]
    the summoning charm
    [arha]
    take me to the sky

    Sample Output

    light the wand
    accio
    what?
    what?

    AC代码:直接暴力。会更新哈希做法,但map好像要MLE。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    char name[100010][30];
    char fun[100010][90];
    
    using namespace std;
    int main()
    {
        char s1[30],s2[90];
        int i,j,m=0,n;
        while(1){
            scanf("%s",s1);
            if(strcmp(s1,"@END@")==0) break;
            getchar();
            gets(s2);
            strcpy(name[m],s1);
            strcpy(fun[m],s2);
            m++;
        }
        scanf("%d",&n);
        getchar();
        while(n--){
            gets(s2);
            if(s2[0]=='['){
                for(i=0;i<m;i++){
                    if(strcmp(s2,name[i])==0){
                        break;
                    }
                }
                if(i<m) printf("%s
    ",fun[i]);
                else printf("what?
    ");
            }
            else {
                for(i=0;i<m;i++){
                    if(strcmp(s2,fun[i])==0){
                        break;
                    }
                }
                if(i<m){
                    j=strlen(name[i]);
                    name[i][j-1]='';
                    printf("%s
    ",name[i]+1);
                }
                else printf("what?
    ");
            }
        }
        return 0;
    }

    map:

    #include <iostream>
    #include <cstdio>
    #include <map>
    #include <cstring>
    using namespace std;
    char a[30],b[100];
    char c[130];
    string a1,b1;
    int i,x;
    map<string,string>p;
    int main()
    {
        while(1){
            gets(c);
            if(c[0]=='@') break;
            i=1,x=1;
            a[0]='[';
            while(c[i-1]!=']'){
                a[x++]=c[i++];
            }
            a[x]='';
            i++;
            x=0;
            while(c[i]!=''){
                b[x++]=c[i++];
            }
            b[x]='';
            a1=a;
            b1=b;
            p[a1]=b1;
            p[b1]=a1;
        }
        int n;
        scanf("%d
    ",&n);
        //getchar();
        while(n--){
            gets(a);
            a1=a;
            map<string,string>::iterator m=p.find(a1);
            if(m==p.end())
                cout<<"what?"<<endl;
            else{
                b1=m->second;
                if(b1[0]=='[')
                b1=b1.substr(1,b1.length()-2);
                cout<<b1<<endl;
            }
    
        }
        return 0;
    }
  • 相关阅读:
    基站选址(编程之美2015资格赛)
    2月29日(编程之美2015资格赛)
    跳马
    电子老鼠闯迷宫
    解决按钮重复提交 unbind+bind+setTimeout
    XMLHttpRequest 中 blob类型数据转text
    ExtJs之列表(grid)
    ExtJs之组件(window)
    ExtJs基础
    问题与成长
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319539.html
Copyright © 2011-2022 走看看