Sicily 1194 Message Flood
2012-01-26 20:43
295 查看
这道题我尝试了两种做法,一开始用的是快排+二分,但是实现起来代码较长,而且效率也不是很高。后来学习了STL还有哈希等相关内容,发现直接用STL中的map实现起来很非常简洁。第一份是快排+二分的。
#include <stdio.h> #include <string.h> #include <ctype.h> void ksort(int l, int h, char a[][10]){ int e = h; int p = l; char temp[12]; if (h < l + 2) return; while (l < h) { while (++l < e && strcmp(a[l],a[p])<=0); while (--h > p && strcmp(a[h],a[p])>=0); if (l < h) { strcpy( temp,a[l] ); strcpy( a[l],a[h] ); strcpy( a[h],temp ); } } strcpy( temp,a[h] ); strcpy( a[h],a[p] ); strcpy( a[p],temp ); ksort(p, h, a); ksort(l, e, a); } int bisearch(char a[][10], char find[],int l) { int low, mid, upper; low = 0; upper = l - 1; while(low <= upper) { mid = (low+upper) / 2; if(strcmp(a[mid],find)<0) low = mid+1; else if(strcmp(a[mid],find)>0) upper = mid - 1; else return mid; } return -1; } int main() { char name[20000][10]; char send[20000][10]; int n,m,i,j,k,l; scanf( "%d",&n ); while (n!=0) { scanf( "%d",&m ); for ( i=0;i<n;i++ ) { scanf( "%s",&name[i] ); l=strlen(name[i]); for ( j=0;j<l;j++ ) { name[i][j]=tolower(name[i][j]); } } for ( i=0;i<m;i++ ) { scanf( "%s",&send[i] ); l=strlen(send[i]); for ( j=0;j<l;j++ ) { send[i][j]=tolower(send[i][j] ); } } ksort(0,n,name); ksort(0,m,send); for ( i=0;i<m-1;i++ ) { if ( strcmp( send[i],send[i+1] )==0 ) { send[i][0]='0'; } } k=n; for ( i=0;i<m;i++ ) { if ( send[i][0]!='0' ) { if ( bisearch(name,send[i],n)>=0 ) { k--; } } } printf( "%d\n",k ); scanf( "%d",&n ); } return 0; }下面的是利用map实现的代码。
#include <iostream> using namespace std; #include <map> #include <string> int main() { map<string,int> data; int n,m,i,j; string temp; cin >> n; while ( n!=0 ) { cin >> m; for ( i=0;i<n;i++ ) { cin >> temp; for ( j=0;j<temp.length();j++ ) temp[j]=tolower(temp[j]); data[temp]=1; } for ( i=0;i<m;i++ ) { cin >> temp; for ( j=0;j<temp.length();j++ ) temp[j]=tolower(temp[j]); data.erase( temp ); } cout << data.size() << endl; data.clear(); cin >> n; } return 0; }
相关文章推荐
- sicily--1194. Message Flood
- Sicily 1194. Message Flood
- Sicily 1194 Message Flood
- sicily 1194. Message Flood
- sicily 1194 Message Flood (STL的map和set应用练习)
- set容器的使用-sicily 1194
- sicily 1194 message blood 之失败篇
- sicily 1194 message blood之通过篇
- sicily 1194
- 1194 . Message Flood
- 1194. Message Flood
- Sicily 1194. Message Flood 排序+二分
- Sicily 1194
- Sicilly 1194 Message Flood(字典树+搜索)
- 1194. Message Flood
- sicily 1006.Team Rankings
- sicily 1052.Candy Sharing Game
- Sicily9162(单调队列)
- sicily9162. RAZLIKA
- Sicily 1158 Pick numbers