您的位置:首页 > 其它

SDUTOJ Message Flood (STL容器求解)

2014-11-19 23:15 309 查看

//这道题太狗了..一般查找的话,不用想,直接就回超时.于是第一次的想法就是构造字典树+查找..妈 蛋 ,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  STL set关联容器..