hihoCoder 1566 皇室成员的名字

Posted

tags:

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

皇室成员的名字

题目链接:https://hihocoder.com/problemset/problem/1566

Description

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

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

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

Input

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

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

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

Output

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

 

Sample Input

5  
Elizabeth II  
Elizabeth C 
William IV  
Hiho MMXVII  
Hiho MMXVII

Sample Output

Elizabeth II
Elizabeth C
Hiho MMXVII  
Hiho MMXVII    
William IV

 


题意:

给定一些名字,名字包括英文字母以及罗马数字,以英文字母为第一关键字,罗马数字为第二关键字进行排序。

题解:

水题。预处理罗马数字。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 map<char,int> MAP;
 4 void init()
 5 {
 6     MAP[I]=1;
 7     MAP[V]=5;
 8     MAP[X]=10;
 9     MAP[L]=50;
10     MAP[C]=100;
11     MAP[D]=500;
12     MAP[M]=1000;
13 }
14 int Trans(char *str)
15 {
16     int Len=strlen(str);
17     int sum=0;
18     int i=0;
19     while(i<Len)
20     {
21         if(i<Len-1)
22         {
23             if(MAP[str[i+1]]>MAP[str[i]])    sum-=MAP[str[i]];
24             else sum+=MAP[str[i]];
25         }else sum+=MAP[str[i]];
26         ++i;
27     }
28     return sum;
29 }
30 
31 const int MAXN = 100000+10;
32 struct word{
33     char S[1000];
34     char xx[1000];
35     int num;
36 }W[MAXN];
37 
38 bool cmp(const word &a,const word &b)
39 {
40     int pos=strcmp(a.S,b.S);
41     if(pos!=0)  return pos<0;
42     return a.num<b.num;
43 }
44 
45 char str[1000];
46 
47 int main()
48 {
49     init();
50     int N;
51     scanf("%d",&N);
52     for(int i=0;i<N;i++)
53     {
54         scanf("%s%s",W[i].S,W[i].xx);
55         W[i].num=Trans(W[i].xx);
56     }
57     sort(W,W+N,cmp);
58     for(int i=0;i<N;++i)
59     {
60         printf("%s %s\\n",W[i].S,W[i].xx);
61     }
62     return 0;
63 }

 

题解链接:http://www.cnblogs.com/scidylanpno/p/7470478.html

版权所有:scidylanpno

以上是关于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()用于显示时钟对象的时间。其次,再定义(代码片