zoukankan      html  css  js  c++  java
  • hdu1880

    魔咒词典

    Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 12387    Accepted Submission(s): 3022


    Problem Description
    哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有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?
     
    Author
    ZJU
     
    Source
     
    Recommend
    We have carefully selected several similar problems for you:  1878 1877 1879 1881 1075 
     

    无意中看到这题,就切了一下,感觉这题很适合刚刚接触散列表和字符串处理的朋友,直接对字符串hash就可以了,用map会MlE。

    AC代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    const int MAX=210000;
    const int mod=100007;
    struct Node{
        Node* ne;
        char st[81];
    }haxi[MAX],*h[mod],*cur;
    unsigned int BKDHash(char* s){
        unsigned int seed=131;
        unsigned int ret=0;
        while(*s) ret=ret*seed+*s++;
        return (ret&0x7FFFFFFF)%mod;
    }
    int getId(char* s){
        int code=BKDHash(s);
        Node* ptr=h[code];
        while(ptr){
            if(strcmp(ptr->st,s)==0)
                return ptr-haxi;
            else
                ptr=ptr->ne;
        }
        strcpy(cur->st,s);
        cur->ne=h[code];
        h[code]=cur++;
        return cur-haxi-1;
    }
    int find(char* s){
        int code=BKDHash(s);
        Node* ptr=h[code];
        while(ptr){
            if(strcmp(ptr->st,s)==0){
                return ptr-haxi;
            }else{
                ptr=ptr->ne;
            }
        }
        return -1;
    }
    int main(){
        char s[100],*p;
        int id,n;
        cur=haxi;
        memset(h,0,sizeof(h));
        while(scanf("%s",s),s[0]!='@'){
            getId(s);
            getchar();
            gets(s);
            getId(s);
        }
        scanf("%d",&n);
        gets(s);
        while(n--){
            gets(s);
            id=find(s);
            if(id==-1){
                puts("what?");
            }else{
                p=haxi[id^1].st;
                if(p[0]!='[') puts(p);
                else{
                    p++;
                    while(*p!=']'){
                        putchar(*p++);
                    }
                    puts("");
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    函数
    python操作文件
    POJ-2689-Prime Distance(素数区间筛法)
    POJ-2891-Strange Way to Express Integers(线性同余方程组)
    POJ-2142-The Balance
    POJ-1061-青蛙的约会(扩展欧几里得)
    Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
    Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer
    Educational Codeforces Round 75 (Rated for Div. 2) B. Binary Palindromes
    Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  • 原文地址:https://www.cnblogs.com/shenben/p/5751085.html
Copyright © 2011-2022 走看看