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出现。
输入格式
输出格式
测试样例1
输入
5
输出
I 7
V 2
备注
代码
------------------------前方高能------------------------
------------------------前方高能------------------------
------------------------前方高能------------------------
#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:一定要看的枚举的更多相关文章
- TYVJ P1090 母舰 Label:模拟,题目看清就好
背景 广东汕头聿怀初中 Train#3 Problem 1 描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的.对 ...
- TYVJ P1072 bomb Label:看不懂题意
描述 一场战争正在A国与B国之间如火如荼的展开.B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A国人民不会允许这样的 ...
- TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂
描述 对于一个素数P,我们可以用一系列有理分数(分子.分母都是不大于N的自然数)来逼近sqrt(p),例如P=2,N=5的时候:1/1<5/4<4/3<sqrt(2)<3/2& ...
- TYVJ P1032 零用钱 Label:贪心
背景 USACO OCT09 7TH 描述 作為创造產奶纪录的回报,Farmer John决定开始每个星期给Bessie一点零花钱. FJ有一些硬币,一共有N (1 <= N <= 20) ...
- TYVJ P1091 等差数列 Label:dp
背景 广东汕头聿怀初中 Train#3 Problem 3 描述 等差数列的定义是一个数列S,它满足了(S[i]-S[i-1]) = d (i>1).显然的一个单独的数字或者两个数字也可以形成一 ...
- TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...
- TYVJ P1048 田忌赛马 Label:dp
描述 中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱.现在每匹马的速 ...
- TYVJ P1004 滑雪 Label:记忆化搜索
背景 成成第一次模拟赛 第三道 描述 trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜. ...
- TYVJ P1068 STR Label:KMP匹配 不懂
描述 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度.给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个.N,M,K<=200000 输入格式 第一行三个数 ...
随机推荐
- django-cms 代码研究(二)bugs?
djangocms集成到现有项目中后,发现了几个问题: 1. 现有项目的url匹配失效,下面requests请求被交给djangocms处理了 url(r'^admin/', include(admi ...
- ZJOI Day 2 游记
---恢复内容开始--- 去ZJOI Day 2打了一会酱油...各种神犇大爷都来屠,南外的小朋友也来屠我们了真是感动...没有看到毛爷爷真是可惜.. Day[-1] 早上还在上课,吃完中饭立马跑去找 ...
- python setup.py uninstall
I have installed a python package with python setup.py install How do I uninstall it? ============== ...
- bat批量去除文件首行和合并到文件
bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...
- ios获取一个文件夹下的文件(夹)列表
NSArray* ary=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] pathFo ...
- 使用jquery制作可视化的组织结构
组织结构是做项目里面经常用到的,但是要做成可视化的效果比较少,多数使用树结构来表示,但是对于客户来说不是太直观.可以用jOrgChart来实现.如下图的效果,这样就比较直观. 首先你要去下载jOrgC ...
- Linux中获取当前程序的绝对路径
代码如下: char current_absolut_path[MAX_SIZE] = ""; memset(current_absolut_path,,MAX_SIZE); // ...
- ASP.NET Web API 2 中的属性路由使用(转载)
转载地址:ASP.NET Web API 2 中的属性路由使用
- sql server 本地复制订阅 实现数据库服务器 读写分离
再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...
- 利用JS提交表单的几种方法和验证
第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 <script type="text/javascript"> function ...