读书人

hdu 1075 地图函数的应用

发布时间: 2012-09-05 15:19:35 作者: rapoo

hdu 1075 map函数的应用

What Are You Talking AboutTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Java/Others)
Total Submission(s): 7616 Accepted Submission(s): 2364


Problem DescriptionInputOutputSample InputSample Output
hello, i'm from mars.i like earth!HintHuge input, scanf is recommended.


题意:

start 开始

输入 明文 和对应密文

end 结束

start 开始 输入密文串 输出对应明文 如果没有匹配则输出直接输出 end结束 只有一组测试数据

map函数的应用 也可以用字典树 但是我的一直RE 倒霉 希望那个大侠帮我找找原因


#include<stdio.h>#include<string>#include<iostream>#include<string.h>#include<map>using namespace std;int main(){int i;map<string,string>mp;string a,b,c;char str[4000];cin>>a;while(cin>>a){if(a=="END") break;cin>>b;mp[b]=a;}cin>>a;getchar();getline(cin,c);while(c!="END") //读入一行 包括空格 和gets一样{a="";for(i=0;i<c.size();i++){if(c[i]<'a'||c[i]>'z'){                 if(mp[a]=="") //如果找不到就是空的 cout<<a;                 else cout<<mp[a]; a=""; printf("%c",c[i]);}else  a+=c[i];//注意是加哦}printf("\n");getline(cin,c);}return 0;}/*学到的知识1:string s   这种类型不能用scanf print gets strcmp进行操作2;cin必须有iostream 头文件3: 找不到对应串 map返回为空串  mp[a]==""4: 最后样例结果看着好像不对似的  但是要是单独提取出来 和样例输出事一样的只要一样就OK了 */

RE代码 希望大家帮帮修改下

#include<stdio.h>#include<malloc.h>#include<string.h>char str[5000][50],s[200000];struct haha{    int id;    struct haha *next[26];}*root;int count;struct haha *creat(){    int i;    struct haha *p;    p=(struct haha *)malloc(sizeof(struct haha));    p->id=-1;    for(i=0;i<26;i++)        p->next[i]=NULL;    return p;}void update(char *s){    int i,pos,d;    struct haha *p;    p=root;    d=strlen(s);    for(i=0;i<d;i++)    {        pos=s[i]-'a';        if(p->next[pos]==NULL)        {            p->next[pos]=creat();            p=p->next[pos];        }        else p=p->next[pos];    }    p->id=count;}int query(char *s,int d){    int pos,i;    struct haha *p;    p=root;    for(i=0;i<d;i++)    {        pos=s[i]-'a';        if(p->next[pos]!=NULL) p=p->next[pos];        else return -1;    }    if(p->id!=-1)     return p->id;    else return -1;}int main(){    char s1[20]="START",s2[20]="END",ss[3000];     int d,k,i,flag=0,j;    count=1;    root=creat(); //   while(scanf("%s",s))  //  {  //        if(strcmp(s,s1)==0) break;   // }    while(scanf("%s",str[count]))    {        if(strcmp(str[count],s2)==0) break;        scanf("%s",s);        update(s);        count++;    }   // while(scanf("%s",s))    //{      //    if(strcmp(s,s1)==0) break;    //}    scanf("%s",s);    getchar();   /* while(1)    {        gets(s);        if(strlen(s)==3&&strcmp(s,"END")==0) break;        d=strlen(s);        j=0;        memset(ss,'\0',sizeof(ss));        for(i=0;i<d;i++)        {            if(s[i]>='a'&&s[i]<='z')                ss[j++]=s[i];            else            {                ss[j]='\0';                if(strlen(ss)!=0)                {                    k=query(ss,strlen(ss));                    if(k!=-1)                         printf("%s",str[k]);                    else printf("%s",ss);                                    }                printf("%c",s[i]);                j=0;                memset(ss,'\0',sizeof(ss));            }        }        if(d>=1&&s[d-1]>='a'&&s[d-1]<='z') {ss[j]='\0';j=0;k=query(ss,strlen(ss));printf("%s",str[k]);}        printf("\n"); */        int re=0;        char x;    while(x=getchar())     {                    if((x<='z'&&x>='a')||(x<='Z'&&x>='A'))         {               ss[re++]=x;         }                else         {             ss[re]='\0';             if( !strcmp("END",ss) )               break;               k=query(ss,strlen(ss));                    if(k!=-1)                         printf("%s",str[k]);                    else printf("%s",ss);             printf("%c",x );             re=0;             }    }        return 0;}

读书人网 >编程

热点推荐