USACO2.2 Preface Numbering【思维+打表】

摘要:
这道题乍一看没有什么思路,细看还是没有什么思路嗯,细看还是可以看出些什么端倪。

这道题乍一看没有什么思路,细看还是没有什么思路

嗯,细看还是可以看出些什么端倪。

不能复合嵌套什么的 总结一下就只有这样3种规则:

1.IXCM最多三个同样连续 加起来
2.递减:加起来 注意VLD不连续出现
3.IXCM在比它大1级或2级的数前面 表示减

罗马数字各位独立
应该比较显然吧 如果去掉最高位 剩下的数用罗马数字表示的结果是一样的
在全加的情况下 更显然了:
比如268=100+100+50+10+5+1+1+1=CCLXVIII
68=50+10+5+1+1+1=LXVIII

有减法的情况下:由于一个可表示为10n的数出现在一个比它大1级或2级的数前
所以减法是在它对应的数量级运算的
1.1&5 1&10 个位级
2.10&50 10&100 十位级
3.100&500 100&1000 百位级

所以可以单独考虑每一位的情况
于是我们可以...打表?

打出每一位的数的情况

分别对应:下标标号 字母 和 字母所代表的数值
$1$ $I$ $1$
$2$ $V$ $5$
$3$ $X$ $10$
$4$ $L$ $50$
$5$ $C$ $100$
$6$ $D$ $500$
$7$ $M$ $1000$
千位:$3$:$MMM$ $2$:$MM$ $1$:$M$
百位:$9$:$CM$ $8$:$DCCC$ $7$:$DCC$ $6$:$DC$ $5$:$D$ $4$:$CD$ $3$:$CCC$ $2$:$CC$ $1$:$C$
十位:$9$:$XC$ $8$:$LXXX$ $7$:$LXX$ $6$:$LX$ $5$:$L$ $4$:$XL$ $3$:$XXX$ $2$:$XX$ $1$:$X$
个位:$9$:$ IX$ $8$:$VIII$ $7$:$VII$ $6$:$VI$ $5$:$V$ 4:$IV$ $3$:$III$ $2$:$II$ $1$:$I$

1 /*
2 ID: Starry21
3 LANG: C++
4 TASK: preface                 
5 */  
6 #include<iostream>
7 #include<string>
8 #include<cstdio>
9 #include<cstring>
10 #include<vector>
11 #include<algorithm>
12 #include<queue>
13 using namespacestd;
14 #define N 70
15 #define ll long long
16 #define INF 0x3f3f3f3f
17 int n,res[10];
18 char ans[10]={'L','I','V','X','L','C','D','M','Y','T'};
19 /*
20 打出每一位的数的情况
21 1 I 1 
22 2 V 5 
23 3 X 10 
24 4 L 50 
25 5 C 100 
26 6 D 500 
27 7 M 1000
28 千位:3:MMM 2:MM 1:M 
29 百位:9:CM 8:DCCC 7:DCC 6:DC 5:D 4:CD 3:CCC 2:CC 1:C
30 十位:9:XC 8:LXXX 7:LXX 6:LX 5:L 4:XL 3:XXX 2:XX 1:X
31 个位:9: IX 8:VIII 7:VII 6:VI 5:V 4:IV 3:III 2:II 1:I
32 */
33 int tt[4][10]/*thousand table*/,ht[10][10],et[10][10]/*tens*/,st[10][10];
34 voidInit()
35 {
36     tt[3][7]=3,tt[2][7]=2,tt[1][7]=1;
37     ht[9][5]=1,ht[9][7]=1,ht[8][5]=3,ht[8][6]=1,ht[7][5]=2,ht[7][6]=1;
38     ht[6][5]=1,ht[6][6]=1,ht[5][6]=1,ht[4][5]=1,ht[4][6]=1;
39     ht[3][5]=3,ht[2][5]=2,ht[1][5]=1;
40     et[9][3]=1,et[9][5]=1,et[8][3]=3,et[8][4]=1,et[7][3]=2,et[7][4]=1;
41     et[6][3]=1,et[6][4]=1,et[5][4]=1,et[4][3]=1,et[4][4]=1;
42     et[3][3]=3,et[2][3]=2,et[1][3]=1;
43     st[9][1]=1,st[9][3]=1,st[8][1]=3,st[8][2]=1,st[7][1]=2,st[7][2]=1;
44     st[6][1]=1,st[6][2]=1,st[5][2]=1,st[4][1]=1,st[4][2]=1;
45     st[3][1]=3,st[2][1]=2,st[1][1]=1;
46 }
47 void work(intx)
48 {
49     int cnt=0;
50     while(x)
51 {
52         cnt++;
53         int t=x%10;
54         if(cnt==1)
55 {
56             for(int i=1;i<=7;i++)
57                 res[i]+=st[t][i];
58 }
59         if(cnt==2)
60 {
61             for(int i=1;i<=7;i++)
62                 res[i]+=et[t][i];
63 }
64         if(cnt==3)
65 {
66             for(int i=1;i<=7;i++)
67                 res[i]+=ht[t][i];
68 }
69         if(cnt==4)
70 {
71             for(int i=1;i<=7;i++)
72                 res[i]+=tt[t][i];
73 }
74         x=x/10;
75 }
76 }
77 intmain() 
78 {
79     //freopen("preface.in","r",stdin);
80     //freopen("preface.out","w",stdout);
81 Init();
82     scanf("%d",&n);
83     for(int x=1;x<=n;x++)
84 work(x);
85     for(int i=1;i<=7;i++)
86         if(res[i])
87             printf("%c %d
",ans[i],res[i]);
88     return 0;
89 }
Code

免责声明:文章转载自《USACO2.2 Preface Numbering【思维+打表】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OC输入输出Linux Tomcat部署常用命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

(一)JIRA API 对接

系统应与JIRA接口,将系统数据发送给JIRA,并将JIRA数据返回给系统。经过长时间的研究,我们发现,实际上,我们只需要将原始数据作为json数据提供给jira接口,而jira接口就会产生问题。jira的API中存在许多项目创建和创建问题。我们在网上找到了6.1 API。根据这个文档,我们可以检查它是get还是post,需要什么类型的json文件,以及返回...

JS事件 文本框内容改变事件(onchange)通过改变文本框的内容来触发onchange事件,同时执行被调用的程序。

以下代码显示,当用户更改文本框中的文本时,会弹出一个对话框“您更改了文本内容!”。运行结果:该任务补充了右侧编辑器的第13行。当文本框的内容发生更改时,将调用message()函数,并弹出对话框“您更改了文本内容!”。DOCTYPEHTML˃文本框内容更改事件functionmessage(){alert(“您更改了文本内容!”);}个人简介:请编写您的个人...

简谈docker-compose内存控制Java问题

最近,我正在整理docker合成内存的问题,并编写了一个模板供您参考。命令:/ceshi/start。Sh#在启动时重新启动脚本:始终#--cpu共享:当cpu资源充足时,设置cpu权重没有意义。只有当容器竞争CPU资源时,#CPU的权重才能使不同容器使用不同数量的CPU。我们可以将其设置为2以获得非常低的权重,但将其设置成0以获得默认值1024。上面写了相...

element 导航菜单 控制路由跳转

处理中心&lt;我的平台&lt;templateslot=“title”&gt;选项1&lt;el menu itemindex=“2-4-3”&gt;选项3&lt;消息中心&lt;el menu itemindex=“4”&gt;//www.ele.me“rel=”externalnofall...

codeforces 765 F Souvenirs 线段树+set

问题的含义:多个查询的间隔中两个数字之差的绝对值的最小值:可以根据查询的l对脱机查询进行排序,并且可以从r到l进行反向查询,并且间隔i+1到n的每次更新都可以确保此更新不会影响下一次和后续更新。因为当两个区间相互覆盖时,具有较小l的区间的值必须小于或等于另一个区间,因此可以绘制一个图来理解。...

git使用说明

初次使用请参考百度,google,博客园。1修改文件并提交到github[luwenwei@dev01v~/git/helww/labs]$vimREADME[luwenwei@dev01v~/git/helww/labs]$gitdiffdiff--gita/READMEb/READMEindex39d8172..464c83f100644---a/REA...