【传送门:51nod-1131


简要题意:

  给出A,B,表示有一个区间为A到B

  给出X,Y,表示有一个区间为X到Y

  求出X到Y中能够被A到B中的数(可重复)相加得到的不同的数的个数


题解:

  乱搞题,暴力显然不行,但是我们会发现l到r中的数能被表示出来,那么k*l到k*r的数也能被表示出来(k为常数)

  其实这个性质很显然

  然后随着k的增大,最终得到的区间会重叠

  如样例中A=8,B=10

  (8 10)->(16 20)->(24 30)->(32 40)->(40 50)....

  会发现当k=4时,k*A=32,k*B=40,然后k再加1的时候,区间重叠了

  一旦重叠,那就说明当k>=4时,32及以上的数都能被表示出来

  所以我们就可以乱搞了,因为分界的k满足k*B>=(k+1)A,所以我们可以得到k=A/(B-A),然后分情况就好了


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
LL A,B,X,Y;
scanf("%lld%lld%lld%lld",&A,&B,&X,&Y);
if(A>Y){printf("0\n");continue;}
if(A>X) X=A;
LL k=A/(B-A);
if(k==||k==){printf("%lld\n",max(0LL,Y-max(X,A)+));continue;}
LL sum=;
LL l,r,ans1,ans2,mid;
l=;r=k;ans1=-;
while(l<=r)
{
mid=(l+r)/;
if(A*mid<=X) l=mid+,ans1=mid;
else r=mid-;
}
l=;r=k;ans2=-;
while(l<=r)
{
mid=(l+r)/;
if(A*mid<=Y) l=mid+,ans2=mid;
else r=mid-;
}
LL s=;
if(ans2==-);
else if(ans2<k)
{
if(X<=ans1*B) s+=ans1*B-X+;
if(Y<=ans2*B) s+=Y-ans2*A+;
if(ans1+<ans2) s+=(ans2-ans1-)*(B-A+);
}
else
{
if(ans1<k)
{
LL s=Y-ans2*A+;
if(X<=ans1*B) s+=ans1*B-X+;
s+=(ans2-ans1-)*(B-A+);
}
else s=Y-X+;
}
printf("%lld\n",s);
}
return ;
}

51nod-1131: 覆盖数字的数量的更多相关文章

  1. 51nod 1132 覆盖数字的数量 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1132 题意是给定a,b,l,r求[l,r]内有几个整数可以表示成ax+b ...

  2. 51nod 1131 数列

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1131 1131 覆盖数字的数量 基准时间限制:1 秒 空间限制:1310 ...

  3. 51nod 1770 数数字

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ⋯ aaan个a × b 的结果里面 ...

  4. 51nod 1009:数字1的数量

    1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个 ...

  5. ACM学习历程—51NOD 1770数数字(循环节)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...

  6. 51nod 1276 1276 岛屿的数量 (很好玩的题目

    题意: 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有 ...

  7. 51nod 1251 Fox序列的数量 (容斥)

    枚举最多数字的出现次数$k$, 考虑其他数字的分配情况. 对至少$x$种数出现$\ge k$次的方案容斥, 有 $\sum (-1)^x\binom{m-1}{x}\binom{n-(x+1)k+m- ...

  8. 51nod 1276:岛屿的数量 很好玩的题目

    1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  取消关注 有N个岛连在一起形成了一个大的岛屿,如果海平 ...

  9. 51nod 1387 移数字

    任意门 回来拉模版的时候意外发现这个题还没写题解,所以就随便补点吧. 题意其实就是要你求n的阶乘在模意义下的值. 首先找出来一个最大的$m$满足$m^2<=n$,对于大于$m^2$部分的数我们直 ...

随机推荐

  1. java有参无参构造器的的执行顺序

    这里拿了用数组构造栈的一段代码说明一下 public class StackArray<E> { private Object[] data = null; private int max ...

  2. Linux 网络搭建

    如果系统环境崩溃.   调用/usr/bin/vim /etc/profile Windows    1 本地连接使用固定IP   vmware 8    2  修改Windows的hosts地址   ...

  3. $.ajax() 获取不到return 返回值

    /*常见错误示例 直接在 ajax 里面return 结果 */ function demo(){ $.ajax({ url : 'test.do', type : "post", ...

  4. explicit的用法

    http://blog.csdn.net/chollima/article/details/3486230

  5. HDU 4329 Contest 3

    果然换个编译器就过了.总的来说,不难,不过就是处理一些空格.学习了一个新的类 istringstream可以按空格划分.然后,那条式子要理解. 式子的意义是: 找到一个串,该串在query中是第几个找 ...

  6. Bootstrap组件之页头、缩略图

    .page-header--指定div元素包裹页头组件. <div class="page-header"> <h1>小镇菇凉<small> 2 ...

  7. 百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?

    一.短链接是什么 url=HPqdQ5VR3vA39x7ZWoWyNzwWnsDhTbh66BTpdzsJLroBDzFRm4JV-G818Zc027uZrwe7zxtxnD4H2FUahftpUK& ...

  8. 对苹果“五仁”编程语言Swift的简单分析

    对苹果"五仁"编程语言Swift的简单分析 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUHJvdGVhcw==/font/5a6L5 ...

  9. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  10. [luogu P4197] Peaks 解题报告(在线:kruskal重构树+主席树 离线:主席树+线段树合并)

    题目链接: https://www.luogu.org/problemnew/show/P4197 题目: 在Bytemountains有N座山峰,每座山峰有他的高度$h_i$.有些山峰之间有双向道路 ...