SDUTOJ Message Flood (STL容器求解)

来源:互联网 发布:专业处理淘宝盗图申诉 编辑:程序博客网 时间:2024/06/05 02:40
//这道题太狗了..一般查找的话,不用想,直接就回超时.于是第一次的想法就是构造字典树+查找..妈 蛋 ,SDUTOJ的内存我怀疑是否够65536K.无论怎么优化,直接MLE,悲剧了.最后还是容器求解吧....醉了..先附上MLE代码../*#include<iostream>#include<string.h>#include<stdlib.h>#include<stdio.h>using namespace std;typedef struct trie{int count;struct trie *next[26];}trie;trie *root;void createtrie(char *s){int i;int len=strlen(s);trie *p=root,*q;for(i=0;i<len;i++){int id = s[i]-'a';if(p->next[id]==NULL){            q=new trie;q->count=1;for(int j=0;j<26;j++)q->next[j]=NULL;p->next[id]=q;p=p->next[id];}else{p->next[id]->count++;p=p->next[id];}}p->count=-1;}int findtrie(char *s){int i;int len=strlen(s);trie *p=root;for(i=0;i<len;i++){int id=s[i]-'a';p=p->next[id];if(p==NULL)return 0;if(p->count==-1)return 1;}return 1;}void deal(trie *t){for(int i=0;i<26;i++){if(t->next[i])deal(t->next[i]);}delete t;}void trans(char *s){int len=strlen(s);for(int i=0;i<len;i++){if(s[i]>='A'&&s[i]<='Z')s[i]=s[i]-'A'+'a';}}int main(){int n,m,i,c,o;char s[11],s1[11];while(cin>>n){if(n==0){break;}cin>>m;c=0;root=new trie;for(o=0;o<26;o++)root->next[o]=NULL;for(i=0;i<n;i++){cin>>s;trans(s);createtrie(s);}for(i=0;i<m;i++){cin>>s1;trans(s1);c+=findtrie(s1);}cout<<c<<endl;deal(root);}return 0;}*/下面就是容器求解的正确代码。。#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <set>using namespace std;int main(){    int n,m,i,j,len;    char s[30];    while(scanf("%d",&n)!=EOF&&n)    {        set<string>mp;//声明set容器        set<string>::iterator it;//声明set迭代器        scanf("%d",&m);        getchar();        for(i=0; i<n; i++)        {            gets(s);            len=strlen(s);            for(j=0; j<len; j++)            {                s[j]=towlower(s[j]);            }            mp.insert(s);//向set里加入一个元素        }        for(i=0; i<m; i++)        {            gets(s);            len=strlen(s);            for(j=0; j<len; j++)            {                s[j]=towlower(s[j]);            }            if(mp.count(s))//判断容器里是否存在该元素                mp.erase(s);//如果容器里存在该元素,则删除        }        printf("%d\n",mp.size());//输出容器内剩余元素个数    }    return 0;}

1 0
原创粉丝点击