Message Flood(map)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=203#problem/D
以前用字典树做过
#include <string.h> #include <stdio.h> #include <string> #include <map> using namespace std; int main() { char a[30]; int n,m,sum,l; while(scanf("%d",&n)!=EOF&&n!=0) { sum=0; scanf("%d",&m); map<string,int>q; q.clear(); for(int i=0; i<n; i++) { scanf("%s",a); l=strlen(a); for(int j=0; j<l; j++) a[j]=tolower(a[j]);//将字符转换成小写字符 q[a]++; } while(m--) { scanf("%s",a); l=strlen(a); for(int i=0;i<l;i++) a[i]=tolower(a[i]); if(q.count(a)>0) { sum++; q.erase(q.find(a)); } } printf("%d\n",n-sum); } return 0; }
第一次做的方法
#include<stdio.h> #include<iostream> #include<map> #include<stdlib.h> #include<string.h> using namespace std; char a[20001][11]; int main() { int n,m,l; char b[11]; map<string,int>q; while(scanf("%d",&n)!=EOF&&n!=0) { q.clear(); scanf("%d",&m); getchar(); for(int i=0;i<n;i++) { gets(a[i]); l=strlen(a[i]); for(int j=0;j<l;j++) { if(a[i][j]>='A'&&a[i][j]<='Z') a[i][j]=a[i][j]+32; } q[a[i]]++; } for(int i=1;i<=m;i++) { gets(b); l=strlen(b); for(int i=0;i<l;i++) { if(b[i]>='A'&&b[i]<='Z') b[i]=b[i]+32; } q[b]--; } int sum=0; for(int i=0;i<n;i++) { if(q[a[i]]>=1) sum++; } printf("%d\n",sum); } 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; }