hihocoder 1566皇室成员的名字

Posted 极速快码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder 1566皇室成员的名字相关的知识,希望对你有一定的参考价值。


#1566 : 皇室成员的名字


时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Ho正在学习世界历史。他发现历史上很多西方国家的皇室成员的名字都是由英文名字加罗马数字组成的,例如George IV(乔治四世)、William IV(威廉四世)、Elizabeth II(伊丽莎白二世)等。  

为了更好的梳理历史脉络,小Ho决定写个程序把历史书上出现过的皇室名字排序:首先按英文名字的字典序排序,如果英文名字相同,再按罗马数字从小到大的顺序排序。  

罗马数字表示可以参考 https://en.wikipedia.org/wiki/Roman_numerals 中的"standard forms"。

输入

第一行包含一个整数N,表示名字的总数。

以下N行每行包含一个名字。英文名字与罗马数字之间由一个空格隔开。其中英文名字首字母是大写字母,其余字母是小写字母。  

对于100%的数据,1 ≤ N ≤ 100000, 罗马数字 < 4000

输出

输出N行,每行一个名字。

样例输入
5  
Elizabeth II  
Elizabeth C 
William IV  
Hiho MMXVII  
Hiho MMXVII 
样例输出
Elizabeth II
Elizabeth C
Hiho MMXVII  
Hiho MMXVII    
William IV



1
#include<bits/stdc++.h> 2 #define pb push_back 3 using namespace std; 4 const int maxn = 1e3 + 10; 5 struct node {//结构体保存数据 6 string v; 7 string t; 8 int id; 9 node() { 10 id = 0; 11 } 12 node(string x, string y, int d) : v(x),t(y),id(d){} 13 bool operator<(const node&x)const {//排序方法 14 if(v == x.v) return id < x.id; 15 return v < x.v; 16 } 17 }; 18 int romanToInt(string s) {//计数阿拉伯数字对应的数值 19 int tagVal[256]; 20 tagVal[I] = 1; 21 tagVal[V] = 5; 22 tagVal[X] = 10; 23 tagVal[C] = 100; 24 tagVal[M] = 1000; 25 tagVal[L] = 50; 26 tagVal[D] = 500; 27 int val = 0; 28 for(int i = 0; i < s.length(); i++){ 29 if(i+1 >= s.length() || tagVal[s[i+1]] <= tagVal[s[i]]) 30 val += tagVal[s[i]]; 31 else 32 val -= tagVal[s[i]]; 33 } 34 return val; 35 } 36 37 int main() { 38 int n; 39 vector<node> a; 40 string x, y; 41 cin >> n; 42 for (int i = 0; i < n; i++) { 43 cin >> x >> y; 44 node t(x, x+" " + y, romanToInt(y)); 45 a.pb(t); 46 } 47 sort(a.begin(), a.end()); 48 for (node&t:a) 49 cout << t.t << endl; 50 return 0; 51 }

 

以上是关于hihocoder 1566皇室成员的名字的主要内容,如果未能解决你的问题,请参考以下文章

这对花瓶只能单只出行,就像皇室成员不能同乘一架飞机:3星|《三联生活周刊》2018年2期

[ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

HihoCoder 1640 : 命名的烦恼(预处理)(好题)

编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时分秒,一个构造方法用于对三个成员变量(时分秒) 进行初始化,还有一个成员方法show()用于(代码片

hihocoder #1333 : 平衡树·Splay2

定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时分秒,一个构造方法用于对三个成员变量(时分秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义(代码片