描述

一类书的序言是以罗马数字标页码的。传统罗马数字用单个字母表示特定的数值,以下是标准数字表:

I 1  L 50  M 1000
V 5  C 100
X 10 D 500
最多3个同样的可以表示为10n的数字(I,X,C,M)可以连续放在一起,表示它们的和:

III=3
CCC=300
可表示为5x10n的字符(V,L,D)从不连续出现。

除了下一个规则,一般来说,字符以递减的顺序接连出现:

CCLXVIII = 100+100+50+10+5+1+1+1 = 268
有时,一个可表示为10n的数出现在一个比它大1级或2级的数前(I在V或X前面,X在L或C前面,等等)。在这种情况下,数值等于后面的那个数减去前面的那个数:

IV = 4
IX = 9
XL = 40
This compound mark forms a unit and may not be combined to make another compound mark (e.g., IXL is wrong for 39; XXXIX is correct).

像XD, IC, 和XM这样的表达是非法的,因为前面的数比后面的数小太多。对于XD(490的错误表达),可以写成 CDXC; 对于IC(99的错误表达),可以写成XCIX; 对于XM(990的错误表达),可以写成CMXC。 90 is expressed XC and not LXL, since L followed by X connotes that successive marks are X or smaller (probably, anyway).

给定N(1 <= N < 3,500), 序言的页码数,请统计在第1页到第N页中,有几个I出现,几个V出现,等等 (从小到大的顺序)。不要输出并没有出现过的字符。

比如N = 5, 那么页码数为: I, II, III, IV, V. 总共有7个I出现,2个V出现。

输入格式

一个整数N。 

输出格式

每行一个字符和一个数字k,表示这个字符出现了k次。字符必须按数字表中的递增顺序输出。

测试样例1

输入

5

输出

I 7 
V 2

备注

USACO 2.2.1

代码

------------------------前方高能------------------------

------------------------前方高能------------------------

------------------------前方高能------------------------

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int total[];
void inc(char xx,int n)
{
total[int (xx)]+=n;
}
void add(int xx)
{
if (xx==) inc('i',);
if (xx==) inc('i',);
if (xx==) inc('i',);
if (xx==) {inc('i',);inc('v',);}
if (xx==) inc('v',);
if (xx==) {inc('v',);inc('i',); }
if (xx==) {inc('v',);inc('i',);}
if (xx==) {inc('v',);inc('i',);}
if (xx==) {inc('i',);inc('x',);}
if (xx==) inc('x',);
if (xx==) inc('x',);
if (xx==) inc('x',);
if (xx==) {inc('x',);inc('l',);}
if (xx==) inc('l',);
if (xx==) {inc('l',);inc('x',);}
if (xx==) {inc('l',);inc('x',); }
if (xx==) {inc('l',);inc('x',); }
if (xx==) {inc('c',);inc('x',); }
if (xx==) inc('c',);
if (xx==) inc('c',);
if (xx==) inc('c',);
if (xx==) {inc('c',);inc('d',); }
if (xx==) inc('d',);
if (xx==) {inc('d',);inc('c',);}
if (xx==) {inc('d',);inc('c',); }
if (xx==) {inc('d',);inc('c',); }
if (xx==) {inc('c',);inc('m',); }
if (xx==) inc('m',);
if (xx==) inc('m',);
if (xx==) inc('m',);
}
int main()
{
int n,t;
cin>>n;
memset(total,,sizeof(total));
for(int j=;j<=n;j++)
{
int i=j;
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
if(i>=) {add();i-=;}
}
total[int ('i')]==? :cout<<'I'<<' '<<total[int ('i')]<<endl;
total[int ('v')]==? :cout<<'V'<<' '<<total[int ('v')]<<endl;
total[int ('x')]==? :cout<<'X'<<' '<<total[int ('x')]<<endl;
total[int ('l')]==? :cout<<'L'<<' '<<total[int ('l')]<<endl;
total[int ('c')]==? :cout<<'C'<<' '<<total[int ('c')]<<endl;
total[int ('d')]==? :cout<<'D'<<' '<<total[int ('d')]<<endl;
total[int ('m')]==? :cout<<'M'<<' '<<total[int ('m')]<<endl;
return ;
}

不解释,Otz大神

TYVJ P1070 罗马数字 Label:一定要看的枚举的更多相关文章

  1. TYVJ P1090 母舰 Label:模拟,题目看清就好

    背景 广东汕头聿怀初中 Train#3 Problem 1 描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的.对 ...

  2. TYVJ P1072 bomb Label:看不懂题意

    描述 一场战争正在A国与B国之间如火如荼的展开.B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A国人民不会允许这样的 ...

  3. TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂

    描述 对于一个素数P,我们可以用一系列有理分数(分子.分母都是不大于N的自然数)来逼近sqrt(p),例如P=2,N=5的时候:1/1<5/4<4/3<sqrt(2)<3/2& ...

  4. TYVJ P1032 零用钱 Label:贪心

    背景 USACO OCT09 7TH 描述 作為创造產奶纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱. FJ有一些硬币,一共有N (1 <= N <= 20) ...

  5. TYVJ P1091 等差数列 Label:dp

    背景 广东汕头聿怀初中 Train#3 Problem 3 描述 等差数列的定义是一个数列S,它满足了(S[i]-S[i-1]) = d (i>1).显然的一个单独的数字或者两个数字也可以形成一 ...

  6. TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)

    描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...

  7. TYVJ P1048 田忌赛马 Label:dp

    描述     中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱.现在每匹马的速 ...

  8. TYVJ P1004 滑雪 Label:记忆化搜索

    背景 成成第一次模拟赛 第三道 描述     trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜.    ...

  9. TYVJ P1068 STR Label:KMP匹配 不懂

    描述 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度.给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个.N,M,K<=200000 输入格式 第一行三个数  ...

随机推荐

  1. django-cms 代码研究(二)bugs?

    djangocms集成到现有项目中后,发现了几个问题: 1. 现有项目的url匹配失效,下面requests请求被交给djangocms处理了 url(r'^admin/', include(admi ...

  2. ZJOI Day 2 游记

    ---恢复内容开始--- 去ZJOI Day 2打了一会酱油...各种神犇大爷都来屠,南外的小朋友也来屠我们了真是感动...没有看到毛爷爷真是可惜.. Day[-1] 早上还在上课,吃完中饭立马跑去找 ...

  3. python setup.py uninstall

    I have installed a python package with python setup.py install How do I uninstall it? ============== ...

  4. bat批量去除文件首行和合并到文件

    bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...

  5. ios获取一个文件夹下的文件(夹)列表

    NSArray* ary=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] pathFo ...

  6. 使用jquery制作可视化的组织结构

    组织结构是做项目里面经常用到的,但是要做成可视化的效果比较少,多数使用树结构来表示,但是对于客户来说不是太直观.可以用jOrgChart来实现.如下图的效果,这样就比较直观. 首先你要去下载jOrgC ...

  7. Linux中获取当前程序的绝对路径

    代码如下: char current_absolut_path[MAX_SIZE] = ""; memset(current_absolut_path,,MAX_SIZE); // ...

  8. ASP.NET Web API 2 中的属性路由使用(转载)

    转载地址:ASP.NET Web API 2 中的属性路由使用

  9. sql server 本地复制订阅 实现数据库服务器 读写分离

    再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...

  10. 利用JS提交表单的几种方法和验证

    第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 <script type="text/javascript"> function ...