uva123multimap的稳定排序和set的查找

来源:互联网 发布:python 二维高斯函数 编辑:程序博客网 时间:2024/04/29 17:29

这题刚开始自己撸了一发代码及其繁琐的代码,虽然AC了,但是感觉太烂了,

百度了一下,发下自己截取单词的部分写残了,写复杂了,

另外起初WA了一发,是因为不知道string自带的排序是不稳定排序。

另外这题最简单的做法是用set加上multimap,multimap自动在插入的时候进行排序,

而且是稳定排序,另外set自带的查找函数也省去了写查找了。

自己的代码:注释部分是自己截取字符串的繁琐的代码:

#include<iostream>#include<cstdio>#include<vector>#include<cstring>#include<queue>#include<cctype>#include<cmath>#include<algorithm>#include<sstream>#include<string>using namespace std;struct ss{    string key;    char s[300];    int ai;}result[10010];int cmp(ss a,ss b){    if(a.key!=b.key)        return a.key<b.key;    else        return a.ai<b.ai;}int main(){    char word[60][15];    char ss[300];    int wlen=0;    while(gets(word[wlen])&&strcmp(word[wlen],"::")) {wlen++;}    int rlen=0;    while(gets(ss))    {        for(int i=0;i<strlen(ss);i++)        {            if(isalpha(ss[i]))                ss[i]=tolower(ss[i]);        }     //   cout<<ss<<endl;        for(int j=0;j<strlen(ss);j++)        {             char temp[20];          /*   if(isalpha(ss[j]))            {                 temp[len]=ss[j];                 len++;            }           // cout<<temp<<endl;            if((ss[j]==' '||ss[j]=='\0')&&len)            {                  temp[len]='\0';             //   cout<<temp<<endl;                 int k;                 for(k=0;k<wlen;k++)                 {                     if(strcmp(temp,word[k])==0)                        break;                 }                 if(k==wlen)                 {                     result[rlen].key=result[rlen].key+temp;                     strcpy(result[rlen].s,ss);                   //  cout<<result[rlen].s<<endl;;                    for(int t=front;t<j;t++)                    {                        if(isalpha(result[rlen].s[t]))                            result[rlen].s[t]=toupper(result[rlen].s[t]);                    }                    result[rlen].ai=rlen;                    rlen++;                 }                 front=j;                 len=0;            }            */            if(!isalpha(ss[j])) continue;            int tt=j;          //  char temp[20];            int len=0;            while(isalpha(ss[tt]))            {                temp[len]=ss[tt];                len++;                tt++;            }            temp[len]='\0';             int k;             for(k=0;k<wlen;k++)               {                   if(strcmp(temp,word[k])==0)                       break;                }                 if(k==wlen)                {                     result[rlen].key=result[rlen].key+temp;                     strcpy(result[rlen].s,ss);                   //  cout<<result[rlen].s<<endl;;                    for(int t=j;t<tt;t++)                   {                        //if(isalpha(result[rlen].s[t]))                            result[rlen].s[t]=toupper(result[rlen].s[t]);                   }                   result[rlen].ai=rlen;                   rlen++;                }                 j=tt;        }    }    sort(result,result+rlen,cmp);   // for(int i=0;i<rlen;i++)   //     cout<<result[i].s<<endl;  //  cout<<rlen<<endl;    for(int i=0;i<rlen;i++)        cout<<result[i].s<<endl;    return 0;}
容器代码:

#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<algorithm>#include<string>#include<cstdlib>#include<map>#include<set>#include<cmath>#include<cstring>#include<cctype>#include<climits>#include<memory>using namespace std;#define LL long long#define INT (1<<31)-1;const int N=5000;int main(){    set<string> ignore;    multimap<string,string> r;    string t;    while(getline(cin,t)&&t!="::") ignore.insert(t);    while(getline(cin,t))    {        for(int i=0;i<t.length();i++)            t[i]=tolower(t[i]);        for(int i=0;i<t.size();i++)        {            if(!isalpha(t[i]))              continue;            string t2;            int j=i;            while(isalpha(t[j]))            {                t2+=t[j];                j++;            }            if(!ignore.count(t2))            {                for(int k=0;k<t2.size();k++)                    t2[k]=toupper(t2[k]);                string t3=t;                t3.replace(i,t2.size(),t2);                r.insert(make_pair(t2,t3));            }            i=j;        }    }    for(map<string ,string> ::iterator i=r.begin();i!=r.end();i++)        cout<<i->second<<endl;    return 0;}



0 0
原创粉丝点击