描述

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

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. Nmap备忘单:从探索到漏洞利用(Part 5)

    这是备忘单的最后一部分,在这里主要讲述漏洞评估和渗透测试. 数据库审计 列出数据库名称 nmap -sV --script=mysql-databases 192.168.195.130 上图并没有显 ...

  2. delphi 2007 远程调试

    Remote debugging lets you debug a RAD Studio application running on a remote computer. Once the remo ...

  3. (转)女生应该找一个玩ACM的男生

    1.强烈的事业心 将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩ACM的时候,从侧面好好观察他,你就会发现我说的话没错. 2.永 ...

  4. PHP 的__call()

    PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法.如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用. 例七:__call ...

  5. 【转】基于LDA的Topic Model变形

    转载自wentingtu 基于LDA的Topic Model变形最近几年来,随着LDA的产生和发展,涌现出了一批搞Topic Model的牛人.我主要关注了下面这位大牛和他的学生:David M. B ...

  6. Python egg

    http://blog.csdn.net/turkeyzhou/article/details/8876658

  7. 一些LUA函数(转载)

    转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1.assert (v [, message]) 功能:相当 ...

  8. Linux卸载系统自带的JDK

    安装Linux后,一般系统都会自带openjdk,我们开发中都需要自己安装,所以需要卸载之前的,以CentOS为例,卸载方法如下: 首先执行命令查看存在哪些已安装的包 rpm -qa | grep j ...

  9. mybatis异常:Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}问题分析及解决

    转载自:http://blog.csdn.net/jackpk/article/details/44158701 mybatis异常:Improper inline parameter map for ...

  10. SQLHelper、DBUtil终极封装

    DBUtil.java package org.guangsoft.util; import java.io.InputStream; import java.sql.Connection; impo ...