UVA 123 - Searching Quickly
2017-09-03 17:54
429 查看
题目大意:输入一些单词,这些是不重要的单词。由“::”分界,输入一些句子,句子去除所有不重要的单词以外的其他单词,每个都是关键词,重复单词,也是都关键的。每个句子的可根据关键词的个数n,分为n个句子只有一个关键词大写的句子。按照字典次序,排序这些关键词,输出,如果一个句子中有同样的关键词,按大写的先后顺序。不同句子有同样的关键词,则按句子顺序。
解题思路:用set存所有不重要的单词,每个句子根据关键词变化出的n个句子,将关键词,句子,同时对应输入到两个不同的数组里。最后冒泡排序关键词,同时句子也变换顺序就ok了。稳定排序重要的。注:它跳出输入句子是流结束(ctrl+Z),如果以为的双回车就gg超时了。
ps:一早上想着用map,存关键词和句子。结果各种wa,不过也打了map,set,vector。迭代器,map按value排序,sort排序巴拉巴拉,挺好的,还是有所收获。
ac代码:
后来发现竟然有个multimap容器,可以有相同的键。美滋滋
ac代码去掉了冒泡:
解题思路:用set存所有不重要的单词,每个句子根据关键词变化出的n个句子,将关键词,句子,同时对应输入到两个不同的数组里。最后冒泡排序关键词,同时句子也变换顺序就ok了。稳定排序重要的。注:它跳出输入句子是流结束(ctrl+Z),如果以为的双回车就gg超时了。
ps:一早上想着用map,存关键词和句子。结果各种wa,不过也打了map,set,vector。迭代器,map按value排序,sort排序巴拉巴拉,挺好的,还是有所收获。
ac代码:
#include <iostream> #include <set> #include <cstring> using namespace std; set<string> s; int temp2 = 0; string ll[1005], kk[1005], temp; void exchange(char a[]) { char word[1005], sen[1005]; int len=strlen(a); for (int i=0; i<len; i++) if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 32; for (int i=0; i<len; i++){ if ( isalpha(a[i]) ) for (int j=0; isalpha(a[i]); j++,i++){ word[j] = a[i]; word[j+1] = '\0'; } if (!s.count(word)){ for (int j=0; j<len; j++){ if ( j<i-strlen(word) || j>=i) sen[j] = a[j]; else sen[j] = a[j]-32; sen[j+1] = '\0'; } ll[temp2] = sen; kk[temp2++] = word; } } } int main() { char a[5005]; int i, j; for (i=0; ; i++){ scanf("%s", a); if (!strcmp(a, "::")) break; s.insert(a); } while (gets(a)) exchange(a); for (i=0; i<temp2; i++) for (j=0; j<temp2-i-1; j++){ if ( kk[j]>kk[j+1] ){ temp = ll[j]; ll[j] = ll[j+1]; ll[j+1] = temp; temp = kk[j]; kk[j] = kk[j+1]; kk[j+1] = temp; } } for (i=0; i<temp2; i++) cout << ll[i] << endl; return 0; }
后来发现竟然有个multimap容器,可以有相同的键。美滋滋
ac代码去掉了冒泡:
#include <iostream> #include <set> #include <map> #include <cstring> using namespace std; set<string> s; int temp2 = 0; multimap <string, string> m; multimap <string, string>::iterator it; void exchange(char a[]) { char word[1005], sen[1005]; int len=strlen(a); for (int i=0; i<len; i++) if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 32; for (int i=0; i<len; i++){ if ( isalpha(a[i]) ) for (int j=0; isalpha(a[i]); j++,i++){ word[j] = a[i]; word[j+1] = '\0'; } if (!s.count(word)){ for (int j=0; j<len; j++){ if ( j<i-strlen(word) || j>=i) sen[j] = a[j]; else sen[j] = a[j]-32; sen[j+1] = '\0'; } m.insert(make_pair(word, sen)); } } } int main() { char a[5005]; int i, j; for (i=0; ; i++){ scanf("%s", a); if (!strcmp(a, "::")) break; s.insert(a); } while (gets(a)) exchange(a); for (it=m.begin(); it!=m.end(); it++) cout << it->second << endl; return 0; }
相关文章推荐
- UVA 123 - Searching Quickly
- UVA 123 解题报告
- STL --- UVA 123 Searching Quickly
- uva - 123 - Searching Quickly
- UVa - 123 - Searching Quickly
- UVa 123|Searching Quickly|字符串处理
- uva 123 Searching Quickly
- UVa 123 Searching Quickly
- uva 123 Searching Quickly(字符串排序处理)
- UVa Problem 123 - Searching Quickly
- UVA-123
- uva 123 - Searching Quickly
- UVA 123 快速查找
- uva 123 Searching Quickly
- UVA - 123 - Searching Quickly
- UVA 123
- UVA - 123 Searching Quickly
- uva 123 Searching Quickly(遍历+排序)
- uva 123 Searching Quickly
- UVA 123 Searching Quickly