STL --- UVA 123 Searching Quickly

 2023-09-05 阅读 31 评论 0

摘要:UVA - 123 Searching Quickly Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19296 Mean: 有一个字符串集合Ignore,还有一个文本集合TXT,在TXT中除了Ignore中的单词外其他的都是关键字,现在要你根据这些关键字

 UVA - 123 Searching Quickly

Problem's Link:   http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19296


 

Mean: 

有一个字符串集合Ignore,还有一个文本集合TXT,在TXT中除了Ignore中的单词外其他的都是关键字,现在要你根据这些关键字来给TXT文本排序(根据关键字的字典)。

注意:一行TXT文本中含多少个关键字就需要排多少次序,如果关键字的字典序相同则按照先后顺序来排。

 

analyse:

这题STL用的比较多,使用STL可以很好的解决去重、排序等一序列问题,而手动实现的话就稍微繁琐一点,思路并不难。

Time complexity: O(n)

 

Source code: 

1. STL版:

/*
* this code is made by crazyacking
* Problem: UVA 123
* Verdict: Accepted
* Submission Date: 2015-05-03-20.39
* Time: 0MS
* Memory: 0KB
*/
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <cmath>
#include <set>
#include <map>
#include <cstdlib>
#include <climits>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
#define  MAXN 1000010
#define  LL long long
#define  ULL unsigned long long
using namespace std;string tmp;
set<string> ignore;
multimap<string,string> mp;int main()
{
//        freopen("C:\\Users\\crazyacking\\Desktop\\cin.txt","r",stdin);
//        freopen("C:\\Users\\crazyacking\\Desktop\\cout.txt","w",stdout);
ios_base::sync_with_stdio(false);cin.tie(0);int len;string ig;while(getline(cin,ig) && ig!="::")ignore.insert(ig);mp.clear();while(getline(cin,tmp)){len=tmp.length();for(int i=0;i<len;++i)tmp[i]=tolower(tmp[i]);string t1;int cnt;for(int i=0;i<len;++i){if(tmp[i]!=' '){cnt=0;int j;t1.clear();for(j=i;j<len;++j){if(tmp[j]!=' '){t1.insert(cnt,1,tmp[j]);cnt++;tmp[j]=toupper(tmp[j]);}else break;}i=j;if(ignore.find(t1)==ignore.end())mp.insert(pair<string,string>(t1,tmp));for(j=0;j<len;++j){tmp[j]=tolower(tmp[j]);}}}}multimap<string,string> ::iterator iter=mp.begin();for(;iter!=mp.end();++iter){cout<<(iter->second)<<endl;}return 0;
}
/**/
View Code

2.手动模拟:

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-05-03-21.52
* Time: 0MS
* Memory: 1347KB
*/
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <cmath>
#include <set>
#include <map>
#include <cstdlib>
#include <climits>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
#define  MAXN 1000010
#define  LL long long
using namespace std;struct node
{int n;char word[20][1500];void fun(char *str){int len=strlen(str);for(int i=0;i<len;i++) str[i]=tolower(str[i]);n=0;char *strPtr=strtok(str," ");while(strPtr!=NULL){strcpy(word[n++],strPtr);strPtr=strtok(NULL," ");}}
}title[300];
void output(int t,int pos)
{int len=strlen(title[t].word[pos]);for(int i=0;i<len;i++){title[t].word[pos][i]=toupper(title[t].word[pos][i]);}for(int i=0;i<title[t].n;i++){if(i==0){printf("%s",title[t].word[i]);}else printf(" %s",title[t].word[i]);}for(int i=0;i<len;i++){title[t].word[pos][i]=tolower(title[t].word[pos][i]);}puts("");
}int main()
{ios_base::sync_with_stdio(false);cin.tie(0);int n=0;set<string> ig,key;set<string>::iterator it;char temp[20],str[10005];while(scanf("%s",temp)!=EOF){if(strcmp(temp,"::")==0) break;ig.insert(temp);}while(gets(str)){title[n].fun(str);for(int i=0;i<title[n].n;i++){bool flag=false;for(it=ig.begin();it!=ig.end();it++){if(strcmp(title[n].word[i],(*it).c_str())==0){flag=true;break;}}if(!flag) key.insert(title[n].word[i]);}n++;}for(it=key.begin();it!=key.end();it++){for(int i=0;i<n;i++){for(int j=0;j<title[i].n;j++){if(strcmp((*it).c_str(),title[i].word[j])==0){output(i,j);}}}}return 0;
}
/**/
View Code

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/1492.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息