【传送门: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. a.WHERE使用中单行子查询(适用于>,<,=,>=,<=等条件)

    a.单行子查询(适用于>,<,=,>=,<=等条件)    //查询工资最高的员工编号和员工名   select empno,ename   from emp   where ...

  2. javascript try{}catch(e){}

    <script language="javascript"> try {  throw new Error(10,"asdasdasd") } ca ...

  3. PatentTips - Cross-domain data transfer using deferred page remapping

    BACKGROUND OF THE INVENTION The present invention relates to data transfer across domains, and more ...

  4. MySQL5.7 的 错误堆栈缓冲

    什么是错误缓冲堆栈呢? 举个非常简单的样例,比方运行以下一条语句:mysql> INSERT INTO t_datetime VALUES(2,'4','5');ERROR 1292 (2200 ...

  5. 怎么用命令行运行jar文件

    假设你配置好了jre环境,你如今有一个打包好的jar文件,你能够这样子開始运行 java -classpath example.jar mainClass -classpath告诉虚拟机在哪里找类的字 ...

  6. HDU 4828 (卡特兰数+逆元)

    HDU 4828 Grids 思路:能够转化为卡特兰数,先把前n个人标为0,后n个人标为1.然后去全排列,全排列的数列,假设每一个1的前面相应的0大于等于1,那么就是满足的序列.假设把0看成入栈,1看 ...

  7. hdu5240

    想了辣么多 貌似就一个条件 #include<bits/stdc++.h> using namespace std; int flag=0;int main(){int t,n,kase= ...

  8. nyoj--1087--摆方格(规律)

    摆方格 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角 ...

  9. calender怎么获取每周的周日(给每周的周日特定时间点设置定时)

    获取每周的周日 //如果是周日,特殊处理.老外的周日-周六为一周 calendarTemp.add(Calendar.WEEK_OF_MONTH,1); calendarTemp.set(Calend ...

  10. Android 手势

    GestureDetector:手势监听类,通常在View的setOnTouchListener方法中设置TouchListener,在TouchListener的onTouch函数中把MotionE ...