[YZOJ1062][NOIP福建夏令营]记分牌

题目描述
给定一个数 m 以及 m 个数 N1,N2,N3...Nm 。只用这 m 个数以从小到大的排列方式来表达所有能表达的数字。必有一个数是0
比如:如果有五个数 {0, 1, 2, 6, 9},则 {0, 1, 2, 6, 9, 10, 12, 16…}分别表示:{0, 1, 2, 3, 4, 5, 6, 7}。
给定两个数 X,S, X是仅由这m个数组成的一个数。输出X表示的数以及S转换后的形式。
数据范围
对于 20% 的数据, m3
对于 40% 的数据, X32767S32767
对于 100% 的数据, 2m10X2,147,483,647


那么这道题目怎么做呢?我们先把这道题目简化一下。
简化版题目《小妖数》:
简化版题面《小妖数》
看到数据范围: 1<k<101001 是不是觉得暴力不可做?
很好,看来你已经放弃写暴力了。那么我们来看看怎么做。
如果一个数是小妖数,那么这个数一定仅由6与8构成。
那么我们是不是可以把6看做是0,把8看做是1,然后将小妖数化作一个二进制数?
比如一个数:888668868, 可以转化为111001101,也就是461。
反过来,如果我们把输入的k转化为二进制,然后把这个二进制数用上面的转换规则一一对应,是否能得到第k个小妖数?
答案是否定的。如果我们输入1,转换后的二进制数为 (1)2 根据上面的规则第一个数就是8,这明显是不对的。所以应该将 k1 化为二进制数,进行上述操作,即可得到正解。


回到这道题目,是不是就有了啥思路?这道题目和上述的小妖数有异曲同工之妙,只是将二进制的转换操作换成了m进制。


顺便科普一下进制转换方法:
十进制数 N 转m进制 :
Nmodm 存入数组中,然后将 Nmmodm 存入数组中,然后将 Nmmmodm 存入数组中,以此类推,直到N为0为止。(实际上不会到0,但是在写整数运算的时候会自动取0)
这个m进制数就是将整个数组倒过来输出的数。
m进制数 (N)m ( 2<=m<10 ) 转十进制
十进制数为N的各位上的数乘以 mi1 (i为当前级位)的和。
设这个数N可以用一个数组 M 来表示,总长为 n。那么该十进制数为
ni=1Mimi1

如果题解有误请及时提出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值