#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>
#define pb push_back
using namespace std;
const int maxn = 1e3 + ;
struct node {//结构体保存数据
string v;
string t;
int id;
node() {
id = ;
}
node(string x, string y, int d) : v(x),t(y),id(d){}
bool operator<(const node&x)const {//排序方法
if(v == x.v) return id < x.id;
return v < x.v;
}
};
int romanToInt(string s) {//计数阿拉伯数字对应的数值
int tagVal[];
tagVal['I'] = ;
tagVal['V'] = ;
tagVal['X'] = ;
tagVal['C'] = ;
tagVal['M'] = ;
tagVal['L'] = ;
tagVal['D'] = ;
int val = ;
for(int i = ; i < s.length(); i++){
if(i+ >= s.length() || tagVal[s[i+]] <= tagVal[s[i]])
val += tagVal[s[i]];
else
val -= tagVal[s[i]];
}
return val;
} int main() {
int n;
vector<node> a;
string x, y;
cin >> n;
for (int i = ; i < n; i++) {
cin >> x >> y;
node t(x, x+" " + y, romanToInt(y));
a.pb(t);
}
sort(a.begin(), a.end());
for (node&t:a)
cout << t.t << endl;
return ;
}

最新文章

  1. spark处理大规模语料库统计词汇
  2. mac+phpstorm+xampp断点调试
  3. .net core Jwt 添加
  4. SQL Server CONVERT() 截取日期
  5. javascript中的prototype(原型)认识
  6. global name &#39;validate_on_submit&#39; is not defined错误
  7. JDBC链接MySQL
  8. ORM框架Entity Framework
  9. Python.resource-for-python-from-internet
  10. 关于Cannot assign to &#39;self&#39; outside of a method in the init family解决方法
  11. TFS 2010 使用手册(四)备份与恢复
  12. [LOJ 1008] Fibsieve`s Fantabulous Birthday
  13. 冒泡排序算法(C#实现)
  14. Single NumberII
  15. vm10虚拟机安装Mac OS X10.10教程
  16. java.lang.IllegalStateException: getWriter() has already been called for this response
  17. RSA填充模式
  18. 浏览器模式&amp;用户代理字符串(IE)
  19. Flutter 依赖的那些事儿
  20. Linux swap 使用

热门文章

  1. Log4net 数据库存储(四)
  2. rust-vmm 学习
  3. web 视频播放器clappr 相关
  4. Alibaba Nacos:搭建Nacos平台
  5. C++2.0新特性(七)——&lt;Smart Pointer(智能指针)之weak_ptr&gt;
  6. 【Codeforces】CF367D Sereja and Sets (数学)
  7. Remind Me
  8. Spring MVC JSON乱码问题
  9. Android自动化测试--monkey总结
  10. 监控指标 TP99 TP999 含义