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 }
时间: 2024-10-18 07:00:52

hihocoder 1566 皇室成员的名字的相关文章

创建模型出现成员变量名字冲突时的解决方法

建立模型时可能会出现解析的文件中包含UI里的关键字,比如说id,description,self 解决方法有2. 1.换一个名字作为成员变量的名字,对成员变量逐一赋值,但这个方法不太方便,当变量名太多时书写会很不方便. 2.当然有方法少写些代码, 给_myDescription赋值时调用setDescription: @property(nonatomic,copy,setter=setDescription:)NSString *    myDescription; -(void)setVal

JavaSE7基础 类中成员方法 局部与成员变量名字相同时,使用this访问成员变量

版本参数:jdk-7u72-windows-i586注意事项:博文内容仅供参考,不可用于其他用途. 代码 class Test{ String name; //借助公有的成员方法 访问私有的成员方法 public void setName(String name){ this.name=name; //当前类的对象中的成员变量name = 函数参数列表中局部变量中的name //this 当前类的对象, t对象调用setName方法,this就代表了t } } class Demo{ publi

runtime之玩转成员变量

前言: 不铺垫那么多,单刀直入吧:runtime是一个C和汇编写的动态库,就像是一个小小的系统,将OC和C紧密关联在一次,这个系统主要做两件事情. 1,封装C语言的结构体和函数,让开发者在运行时创建,检查或者修改类,对象和方法等2,传递消息,找出方法的最终执行代码 也就是说我们写的OC代码在运行的时候都会转为运行时代码 通过runtime的学习能够更好理解OC的这种消息发送机制,并且我也认为对runtime的学习是对深入学习iOS必不可少的坎,比如你有可能通过阅读一些第三方框架来提高自己的编程技

C++ Primer 学习笔记_82_模板与泛型编程 --类模板成员[续2]

模板与泛型编程 --类模板成员[续2] 六.完整的Queue类 Queue的完整定义: template <typename Type> class Queue; template <typename Type> ostream &operator<<(ostream &,const Queue<Type> &); template <typename Type> class QueueItem { friend clas

C++ Primer 学习笔记_53_类与数据抽象 --友元、static成员

类 --友元.static成员 一.友元 友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类(对未被授权的函数或类,则阻止其访问):友元的声明以关键字friend开始,但是它只能出现在类定义的内部.友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响. [最佳实践] 通常,将友元声明成组的放在类定义的开始或结尾是个好主意! 1.友元关系:一个例子 假设一个窗口管理类Window_Mgr可能需要访问由其管理的Screen对象的内部

c++ static 类成员

一.什么是static类成员 对于特定类类型的全体对象而言, 访问一个全局对象有时是必要的. 然后,全局对象会破坏封装: 对象需要支持特定类抽象的实现. 如果对象是全局的, 一般的用户代码就可以修改这个值. 类可以定义类静态成员,而不是定义一个可普遍访问的全局对象. 通常, 非static数据成员存在于类类型的每个对象中. 不像普通的数据成员, static数据成员独立于该类的任意对象而存在, 每个static数据成员是与类关联的对象, 并不与该类的对象相关联. 类也可以定义static成员函数

.NET中利用反射来实现自动映射两个对象中的数据成员

在以前的项目开发之中,经常会遇到这样一个问题:比如在外面项目的架构设计之中,我们采用MVC和EntityFramework来构建一个Web应用程序.比如我们采用常用的多层架构,例如有Presentation层.BusinessLogic层.DataAccess层等,各层之间是相对独立并且职责分明的.比如我们在Presentation层中会定义ViewModel,在DataAccess层中的DbContext部分又会由EntityFramework来自动生成StorageModel,或者叫做Dat

Java反射(一)——从查看成员开始

工作中遇到了个难题.项目中有很多存放数据的数据类,都是以xxxBean命名的,比如NovelBean,TopicBean.其中有一个最大的HomeTopBean.这个数据类非常庞大,包括了各种成员变量.而前辈往往使用它时,只是把一个JSONObject甩进去.总之JSONObject里面有的,这个里面一定都有.JSONObject里面没有的,这里面也有.然后,这个HomeTopBean被传来传去,我也不知道它哪些成员有值,哪些成员是Null,哪个成员在中途更新了数据.总之一头乱麻. 然后我就想,

在类的成员函数中调用delete this

在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码.假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定 的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和虚函数.说到这里,相信大家都能明白为什么会这样 了. 根本原因在于delete操作符的功能和类对象的