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 输入格式 第一行三个数 ...
随机推荐
- iPhone取消软件更新上边的1
去除设置的更新+1小红点提示主要分为越狱和非越狱设备两种方法. 越狱状态下方法: 首先将你的设备进行越狱: 越狱后安装ifile(这个自行搜索安装): 用ifile打开/System/Library/ ...
- django动态表格总结
应用场景: A与B之间存在一对多关系. CBV实现方案: CreateView/UpdateView + inlineformset + jquery 具体: view方面:重写post/get方法, ...
- Decompiled .class file,bytecode version:51.0(Java 7) Source for 'Android API 23 Platform' not found
今天在Android Studio中访问Java源码的时候,代码上方出现如下提示: 而且方法体中显示介样内容: throw new RuntimeException("Stub!" ...
- MVC数据验证
深入浅出 MVC 数据验证 2.0 [附演示源码] 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MV ...
- 使用ajax解决ie缓存问题
1.在XMLHttpRequest/发送的请求之前 加上 XMLHttpRequest.setRequestHeader("If-Modified-Since","0&q ...
- 39.递归颠倒栈[ReverseStack]
[题目] 用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶. [分析] 乍一看到这道题目,第一反应是把栈里的所有元素逐一p ...
- chrome浏览器关闭标签页面
chrome浏览器关闭标签页提示:Scripts may close only the windows that were opened by it. 解决办法:通过open方法进行关闭. open( ...
- 惊魂web应用宕机记一次网站的紧急恢复
这次网站的故障出现的比较突然,没有任何防备,有种突如其来的感觉.这是一台阿里云服务器,采用wdcp的nginx+apache+mysql的方式运行.一位同事在对web目录进行压缩后,由于web目录有很 ...
- cocos2d-x的Android工程开启c++0x特性
首先一定要确定你所安装NDK支持c++0x(我安装的android-ndk-r8) 文本打开 项目目录/proj.android/jni/Application.mk 在APP_CPPFLAGS那一行 ...
- 转载一篇关于ios copy的文章
由于原文创作时间较早,一些内容不实用了,我对其进行了加工,去掉了一部分内容,添加了一点注释. 原文连接 http://www.cnblogs.com/ydhliphonedev/archive/201 ...