码迷,mamicode.com
首页 > 其他好文 > 详细

hihoCoder 1566 皇室成员的名字

时间:2017-09-03 19:29:26      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:pac   coder   sam   国家   get   参考   文字   数字   strcmp   

皇室成员的名字

题目链接: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 皇室成员的名字

标签:pac   coder   sam   国家   get   参考   文字   数字   strcmp   

原文地址:http://www.cnblogs.com/scidylanpno/p/7470478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!