vjudge 之#回家了

  个人比赛地址:http://vjudge.net/vjudge/contest/view.action?cid=51789#overview(附有代码)

   problem A: Light OJ 1007

   题目很水,就不说了。

   problem B: Light OJ 1045

题意:给一个数n,求n!在K进制下写出来有多少位数字。(n最大1000000)

思路利用log函数,看一个数x有多少位,直接求log(x)即可,然后加1就是答案;

      所以在十进制下的话,log(n!)+1就是答案,这个式子又是等于             log(1)+log(2)+.......+log(n)+1;

      所以问题就很简单了吧!最后要求K进制下,就是求logk(n!)+1=log(n!)/log(k)+1。

   problem C: Light OJ  1189

题意:给定一个数n,把n表示成如下形式:n=x1!+x2!+...+xn!(xi<xjfor all i<j)(n可以高达10^18)

思路主要思路是贪心,首先处理出1-20的阶乘,然后在阶乘里选数,直接从高位往低位贪;

      简单证明:注意到1,2,6,24,120,720,每一个数前面所有数加起来都没有这个数大,也就是说如果当前这个数

      选不了的话,那么往后面无论怎么选数都不可能比这个数大,所以贪心的思路是正确的。只需把阶乘从最大数

      往最小数扫一遍,贪心选数即可。

   problem D: Light OJ  1136

题意:求区间【A , B】内的数有多少个能被3整除。

思路用纯数学的方法,我们都知道判断一个数n能否被3整除就是看它各位数的和是否能被3整除。因为连续的三个 

      的和一定能被3整除,所以:

      第3k个数:一定能被3整除;

      第3k+1个数:因为从第二个数到最后一个数的和一定能被3整除,所以加上1后肯定不能被3整除了。

      第3k+2个数:因为从第3个数到最后一个数的和一定能被3整除,所以加上1+2=3后也能被3整除;

      综上:所以1~k中能被3整除的有2*(k/3)+(k%3==2?1:0)个

   problem C:Light OJ 1135

题意:给定数组,求数组下标从l到r的数内有多少个数能被3整除。

思路就是一个裸的线段树的区间更新,区间询问,需要用到懒操作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值