UVA-123
来源:互联网 发布:数据分析需要的技能 编辑:程序博客网 时间:2024/06/05 21:16
UVA-123
题意:给一些要忽略的单词,这些单词以外都是关键字,然后给你若干个标题。要你以这些关键字进行排序(当一个标题内存在多个关键字要以每个关键字都参与排序),最后输出。
这题关键有2个:
第一:如何处理字符串,并抓出关键字来进行排序。
——我是把每个标题都小写话,并把每个单词都抓出来,再暴力枚举哪个可以作为关键字,可以的话把所有单词再加成一个关键字大写其他时小写的新标题,建一个struct里面包含新标题和关键字。
第二:输出顺序。
——题目要求:首先关键字按字典序 ,其次相同关键字出现在不同标题中,出现在输入较前位置的标题排在前面,最后同一个关键字在一个标题中出现多次,关键字位于较前位置的排在前面。注意下这个顺序就好来。
剩下的都是细节问题了。
/************************************************************************* > File Name: UVA-123.cpp > Author: Narsh > > Created Time: 2016年07月10日 星期日 08时41分55秒 ************************************************************************/#include <iostream>#include <algorithm>#include <cstdio>#include <string>using namespace std;struct node{ string key[60],lines; int len;} s[300];struct node2{ string key,lines; int x,y; //x记位置, y记输入次序} ans[11000];string misskey[300];int lm,n,lans,len;bool cmp(const node2 a,const node2 b){ if (a.key == b.key && a.y == b.y) return a.x < b.x; if (a.key == b.key) return a.y < b.y; return a.key < b.key;}int main () { freopen ("xx.in","r",stdin); freopen ("xx.out","w",stdout); lm=0; while (true) { lm++; cin>>misskey[lm]; if ( misskey[lm] == "::" ) break; } char zz; scanf("%c",&zz); lm--; n=0; string k; while (getline(cin,s[++n].lines) ){ if (s[n].lines[ s[n].lines.length()-1] != '\n') s[n].lines = s[n].lines + '\n'; s[n].len = 0; k=""; for (int i = 0; i < s[n].lines.length(); i++) if ( s[n].lines[i] !=' ' && s[n].lines[i] != '\n'){ if ( s[n].lines[i] >= 'A' && s[n].lines[i] <= 'Z') s[n].lines[i] = s[n].lines[i] - 'A' + 'a'; k=k+s[n].lines[i]; }else { s[n].len++; s[n].key[s[n].len] = k; k=""; } } bool tag; lans=0; for (int t = 1; t <= n; t++) for (int j = 1; j <= s[t].len; j++){ k = s[t].key[j]; tag = true; for (int i = 1; i <= lm; i++) if (k == misskey[i]) { tag=false; break; } if ( tag ) { k = ""; len=0; for (int i = 1; i <= s[t].len; i++) if (i != j){ k = k +s[t].key[i]; if (i != s[t].len ) k = k + ' '; len += s[t].key[i].length()+1; } else { lans++; ans[lans].y=t; ans[lans].key = ""; ans[lans].x = len+1; for (int l = 0; l < s[t].key[i].length(); l++){ char c; c = s[t].key[i][l]-'a'+'A'; k = k +c; ans[lans].key = ans[lans].key + c; } if (i != s[t].len ) k = k + ' '; } ans[lans].lines = k; } } sort(ans+1,ans+1+lans,cmp); for (int i = 1; i <= lans; i++) cout<<ans[i].lines<<endl;}
代码有点冗长,见谅。
0 0
- Uva 123
- uva 123
- UVA-123
- UVA 123
- UVa 123 Searching Quickly
- uva 123 Searching Quickly
- UVA 123 - Searching Quickly
- 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
- uva 123Searching Quickly
- UVA 123 Searching Quickly
- uva 123 - Searching Quickly
- uva - 123 - Searching Quickly
- Spring的发布处理器(BeanPostProcessor)
- DELPHI获取网卡MAC地址
- E - 排序 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
- 【MyBatis框架】mapper配置文件-关于动态sql
- 卷积神经网络
- UVA-123
- BZOJ 1093: [ZJOI2007]最大半连通子图
- 2014.7.27 ~ 2016.7.10 回顾
- 一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
- 欢迎使用CSDN-markdown编辑器
- HDU-2026 首字母变大写
- 叶酸片
- 蛇形填数
- csdn待改进点之32------>是谁去掉/删除了我博客的一条正常评论?