TYVJ P1070 罗马数字 Label:一定要看的模拟

描述

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

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

代码

------------------------我是妩媚的分割线------------------------

------------------------我是妩媚的分割线------------------------

------------------------我是妩媚的分割线------------------------

------------------------我是妩媚的分割线------------------------

------------------------我是妩媚的分割线------------------------

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 int total[256];
 7 void  inc(char xx,int n)
 8 {
 9       total[int (xx)]+=n;
10 }
11 void  add(int xx)
12 {
13         if (xx==1)    inc(‘i‘,1);
14         if (xx==2)    inc(‘i‘,2);
15         if (xx==3)    inc(‘i‘,3);
16         if (xx==4)    {inc(‘i‘,1);inc(‘v‘,1);}
17         if (xx==5)    inc(‘v‘,1);
18         if (xx==6)    {inc(‘v‘,1);inc(‘i‘,1); }
19         if (xx==7)    {inc(‘v‘,1);inc(‘i‘,2);}
20         if (xx==8)    {inc(‘v‘,1);inc(‘i‘,3);}
21         if (xx==9)    {inc(‘i‘,1);inc(‘x‘,1);}
22         if (xx==10)   inc(‘x‘,1);
23         if (xx==20)   inc(‘x‘,2);
24         if (xx==30)   inc(‘x‘,3);
25         if (xx==40)   {inc(‘x‘,1);inc(‘l‘,1);}
26         if (xx==50)   inc(‘l‘,1);
27         if (xx==60)   {inc(‘l‘,1);inc(‘x‘,1);}
28         if (xx==70)   {inc(‘l‘,1);inc(‘x‘,2); }
29         if (xx==80)   {inc(‘l‘,1);inc(‘x‘,3); }
30         if (xx==90)   {inc(‘c‘,1);inc(‘x‘,1); }
31         if (xx==100)  inc(‘c‘,1);
32         if (xx==200)  inc(‘c‘,2);
33         if (xx==300)  inc(‘c‘,3);
34         if (xx==400)  {inc(‘c‘,1);inc(‘d‘,1); }
35         if (xx==500)  inc(‘d‘,1);
36         if (xx==600)  {inc(‘d‘,1);inc(‘c‘,1);}
37         if (xx==700)  {inc(‘d‘,1);inc(‘c‘,2); }
38         if (xx==800)  {inc(‘d‘,1);inc(‘c‘,3); }
39         if (xx==900)  {inc(‘c‘,1);inc(‘m‘,1); }
40         if (xx==1000) inc(‘m‘,1);
41         if (xx==2000) inc(‘m‘,2);
42         if (xx==3000) inc(‘m‘,3);
43 }
44 int main()
45 {
46     int n,t;
47     cin>>n;
48     memset(total,0,sizeof(total));
49     for(int j=1;j<=n;j++)
50     {
51             int i=j;
52             if(i>=3000) {add(3000);i-=3000;}
53             if(i>=2000) {add(2000);i-=2000;}
54             if(i>=1000) {add(1000);i-=1000;}
55             if(i>=900)  {add(900);i-=900;}
56             if(i>=800)  {add(800);i-=800;}
57             if(i>=700)  {add(700);i-=700;}
58             if(i>=600)  {add(600);i-=600;}
59             if(i>=500)  {add(500);i-=500;}
60             if(i>=400)  {add(400);i-=400;}
61             if(i>=300)  {add(300);i-=300;}
62             if(i>=200)  {add(200);i-=200;}
63             if(i>=100)  {add(100);i-=100;}
64             if(i>=90)   {add(90);i-=90;}
65             if(i>=80)   {add(80);i-=80;}
66             if(i>=70)   {add(70);i-=70;}
67             if(i>=60)   {add(60);i-=60;}
68             if(i>=50)   {add(50);i-=50;}
69             if(i>=40)   {add(40);i-=40;}
70             if(i>=30)   {add(30);i-=30;}
71             if(i>=20)   {add(20);i-=20;}
72             if(i>=10)   {add(10);i-=10;}
73             if(i>=9)    {add(9);i-=9;}
74             if(i>=8)    {add(8);i-=8;}
75             if(i>=7)    {add(7);i-=7;}
76             if(i>=6)    {add(6);i-=6;}
77             if(i>=5)    {add(5);i-=5;}
78             if(i>=4)    {add(4);i-=4;}
79             if(i>=3)    {add(3);i-=3;}
80             if(i>=2)    {add(2);i-=2;}
81             if(i>=1)    {add(1);i-=1;}
82     }
83     total[int (‘i‘)]==0? :cout<<‘I‘<<‘ ‘<<total[int (‘i‘)]<<endl;
84     total[int (‘v‘)]==0? :cout<<‘V‘<<‘ ‘<<total[int (‘v‘)]<<endl;
85     total[int (‘x‘)]==0? :cout<<‘X‘<<‘ ‘<<total[int (‘x‘)]<<endl;
86     total[int (‘l‘)]==0? :cout<<‘L‘<<‘ ‘<<total[int (‘l‘)]<<endl;
87     total[int (‘c‘)]==0? :cout<<‘C‘<<‘ ‘<<total[int (‘c‘)]<<endl;
88     total[int (‘d‘)]==0? :cout<<‘D‘<<‘ ‘<<total[int (‘d‘)]<<endl;
89     total[int (‘m‘)]==0? :cout<<‘M‘<<‘ ‘<<total[int (‘m‘)]<<endl;
90     return 0;
91 }

不解释,Otz大神

时间: 2024-10-14 07:52:29

TYVJ P1070 罗马数字 Label:一定要看的模拟的相关文章

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

背景 广东汕头聿怀初中 Train#3 Problem 1 描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的.对于一艘母舰而言,它是由若干个攻击系统和若干个防御系统组成的.两艘母舰对决时,一艘母舰会选择用不同的攻击系统去攻击对面母舰的防御系统.当这个攻击系统的攻击力大于防御系统的防御力时,那个防御系统会被破坏掉.当一艘母舰的防御系统全部被破坏掉之后,所有的攻击都会攻击到敌方母舰本身上去造成伤害.这样说,一艘母

TYVJ P1072 bomb Label:看不懂题意

描述 一场战争正在A国与B国之间如火如荼的展开.B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A国人民不会允许这样的事情发生,所以这个世界上还存在拦截导弹.现在,你是一名A国负责导弹拦截的高级助理.B国的导弹有效的形成了三维立体打击,我们可以将这些导弹的位置抽象三维中间的点(大小忽略),为了简单起见,我们只考虑一个瞬时的状态,即他们静止的状态.拦截导弹设计非常精良,可以精准的引爆对方导弹而不需要自身损失,但是A国

TYVJ P1032 零用钱 Label:贪心

背景 USACO OCT09 7TH 描述 作為创造產奶纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱. FJ有一些硬币,一共有N (1 <= N <= 20)种不同的面额.每一个面额都能整除所有比它大的面额. 他想用给定的硬币的集合,每个星期至少给Bessie某个零花钱的数目C (1 <= C <= 100000000).请帮他计算他最多能支付多少个星期的零花钱. 输入格式 * 第一行: 两个由空格隔开的整数: N 和 C * 第2到第N+1行: 每一

TYVJ P1051 选课 Label:多叉转二叉&amp;&amp;树形dp(虐心?)

描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得相应的学分. 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修.例如<Frontpage>必须在选修了<Windows操作基础>之后才能选修.我们称<Windows操作基础>是<Frontpage>的先修课

TYVJ P1046 Blast Label:dp

描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符.如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我们定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符

TYVJ P1016 装箱问题 Label:01背包 DP

做题记录:2016-08-15 23:07:04 背景 太原成成中学第2次模拟赛 第三道 描述 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数).要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 第一行,一个整数,表示箱子容量: 第二行,一个整数,表示有n个物品: 接下来n行,分别表示这n个物品的各自体积. 输出格式 一个整数,表示箱子剩余空间. 测试样例1 输入 24 6 8 3 12 7 9 7 输出

TYVJ P1004 滑雪 Label:记忆化搜索

背景 成成第一次模拟赛 第三道 描述 trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜.    例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一.例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条. 输入格式 输入文件 第1行: 两个数字r,c(1<=r,c<=100),表示矩阵的行列.第2..r+1行:每行c个数,表示这个矩阵. 输出格式 输出文件

TYVJ P1031 热浪 Label:dijkstra 最短路

背景 USACO OCT09 9TH 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer John此时以先天下之忧而忧,后天下之乐而乐的精神,身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦. FJ已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线.这些路线包括起始点和终点先一共经过T (1 <= T <= 2,500)个城镇,方便地标号為1到T.除了起点和终

TYVJ P1045 &amp;&amp;洛谷 1388 最大的算式 Label:dp

描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例如:N=5, K=2,5个数字分别为1.2.3.4.5,可以加成:1*2*(3+4+5)=241*(2+3)*(4+5)=45(1*2+3)*(4+5)=45…… 输入格式 输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1).第二