描述

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

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. puppet组织架构

    树结构如下: |-- puppet.conf #主配置配置文件 |-- fileserver.conf #文件服务器配置文件 |-- auth.conf #认证配置文件 |-- autosign.co ...

  2. javascript的事件监听与捕获和冒泡

    在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调来进行相关的操作. 而js中事件监听方法总共有三种,分别如下所示: element.addEventL ...

  3. mysql 源码下载列表

    2013年11月16日 14:57:04 http://download.softagency.net/MySQL/Downloads/MySQL-5.5/ http://code.google.co ...

  4. 转MYSQL学习(三) 函数

    这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MO ...

  5. Python多进程(1)——subprocess与Popen()

    Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...

  6. codeforces 472C.Make It Nondeterministic 解题报告

    题目链接:http://codeforces.com/problemset/problem/472/C 题目意思:给出 n 个 people(从第1行往下数,编号依次为1,2,...,n),每 个 p ...

  7. 【USACO】checker

    一看题目 经典的8皇后问题 不过是皇后数量可变而已 不用想 回溯法. 需要个生成每次可选择序列的函数, 在存储可选择的序列时按照先大后小的顺序排的.这样每次找最小和去掉最小都很方便,只要有个记录数量的 ...

  8. linux常见问题集锦-1

    http://www.cnblogs.com/itech/archive/2011/02/12/1952857.html 感谢作者分享 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 . ...

  9. Stringbuffer与Stringbuilder源码学习和对比

    >>String/StringBuffer/StringBuilder的异同 (1)相同点观察源码会发现,三个类都是被final修饰的,是不可被继承的.(2)不同点String的对象是不可 ...

  10. ubuntu下简单的驱动编译

    转自:http://www.eefocus.com/jefby1990/blog/13-02/291628_c39b8.html 本文是参考了网上多篇帖子而写的算不上什么原创.唯一值得欣慰的只不过在本 ...