zoukankan      html  css  js  c++  java
  • HDU-1113-Word Amalgamation

    这题比较方便的解法是使用STL里的map和set代码如下:

    #include"bits/stdc++.h"
    using namespace std;
    map<string,set<string> >mp;
    string s,t;
    int main(){
        while(cin>>s&&(s!="XXXXXX")){
            t=s;
            sort(s.begin(),s.end());
            mp[s].insert(t);
        }
        while(cin>>s&&(s!="XXXXXX")){
            sort(s.begin(),s.end());
            if(mp.count(s)){
                for(auto i:mp[s])
                cout<<i<<endl;
            }
            else puts("NOT A VALID WORD");
            puts("******");
        }
        return 0;
    }

    这里再加一种我用字典树和链式前向星胡乱搞出来的解法:

    #include"bits/stdc++.h"
    using namespace std;
    typedef long long LL;
    char s[105][10];int tot;
    char *point[105];
    int Next[105];char t[10];
    struct tree{
        int fir;
        tree *Next[26];
    }*root;
    bool cmp(char *s,char *t){
        return strcmp(s,t)==1;
    }
    tree* init(){
        tree* n=(tree*)malloc(sizeof(tree));
        memset(n->Next,NULL,sizeof(n->Next));
        n->fir=-1;
        return n;
    }
    void in(char *t,int id){
        tree* now=root;
        for(int i=0;t[i];i++){
            int j=t[i]-'a';
            if(!now->Next[j])
            now->Next[j]=init();
            now=now->Next[j];
        }
        Next[id]=now->fir;
        now->fir=id;
    }
    void out( char *t){
        tree* now=root;
        for(int i=0;t[i];i++){
            int j=t[i]-'a';
            if(!now->Next[j]){
                puts("NOT A VALID WORD");
                return;
            }
            now=now->Next[j];
        }
        if(~now->fir){
            for(int i=now->fir;~i;i=Next[i])
                puts(point[i]);
        }
        else puts("NOT A VALID WORD");
    }
    int main(){
        root=init();
        while(scanf("%s",s[tot])&&strcmp(s[tot],"XXXXXX"))
        point[tot]=s[tot++];
        sort(point,point+tot,cmp);
        for(int i=0;i<tot;i++){
            strcpy(t,point[i]);
            sort(t,t+strlen(t));
            in(t,i);
        }
        while(scanf("%s",t)&&strcmp(t,"XXXXXX")){
            sort(t,t+strlen(t));
            out(t);
            puts("******");
        }
        return 0;
    }
  • 相关阅读:
    Struts2之Action基础与配置
    关于Struts2的类型转换详解
    Struts2自定义类型转换器
    MyEclipse 快捷键
    Struts2中的ActionContext
    struts2中的action访问web对象
    5.9每日一题题解
    5.8 每日一题题解
    5.7 每日一题题解
    5.6 每日一题题解
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10017220.html
Copyright © 2011-2022 走看看