51nod-1131: 覆盖数字的数量
【传送门: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: 覆盖数字的数量的更多相关文章
- 51nod 1132 覆盖数字的数量 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1132 题意是给定a,b,l,r求[l,r]内有几个整数可以表示成ax+b ...
- 51nod 1131 数列
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1131 1131 覆盖数字的数量 基准时间限制:1 秒 空间限制:1310 ...
- 51nod 1770 数数字
1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注 统计一下 aaa ⋯ aaan个a × b 的结果里面 ...
- 51nod 1009:数字1的数量
1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个 ...
- ACM学习历程—51NOD 1770数数字(循环节)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...
- 51nod 1276 1276 岛屿的数量 (很好玩的题目
题意: 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有 ...
- 51nod 1251 Fox序列的数量 (容斥)
枚举最多数字的出现次数$k$, 考虑其他数字的分配情况. 对至少$x$种数出现$\ge k$次的方案容斥, 有 $\sum (-1)^x\binom{m-1}{x}\binom{n-(x+1)k+m- ...
- 51nod 1276:岛屿的数量 很好玩的题目
1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 有N个岛连在一起形成了一个大的岛屿,如果海平 ...
- 51nod 1387 移数字
任意门 回来拉模版的时候意外发现这个题还没写题解,所以就随便补点吧. 题意其实就是要你求n的阶乘在模意义下的值. 首先找出来一个最大的$m$满足$m^2<=n$,对于大于$m^2$部分的数我们直 ...
随机推荐
- a.WHERE使用中单行子查询(适用于>,<,=,>=,<=等条件)
a.单行子查询(适用于>,<,=,>=,<=等条件) //查询工资最高的员工编号和员工名 select empno,ename from emp where ...
- javascript try{}catch(e){}
<script language="javascript"> try { throw new Error(10,"asdasdasd") } ca ...
- PatentTips - Cross-domain data transfer using deferred page remapping
BACKGROUND OF THE INVENTION The present invention relates to data transfer across domains, and more ...
- MySQL5.7 的 错误堆栈缓冲
什么是错误缓冲堆栈呢? 举个非常简单的样例,比方运行以下一条语句:mysql> INSERT INTO t_datetime VALUES(2,'4','5');ERROR 1292 (2200 ...
- 怎么用命令行运行jar文件
假设你配置好了jre环境,你如今有一个打包好的jar文件,你能够这样子開始运行 java -classpath example.jar mainClass -classpath告诉虚拟机在哪里找类的字 ...
- HDU 4828 (卡特兰数+逆元)
HDU 4828 Grids 思路:能够转化为卡特兰数,先把前n个人标为0,后n个人标为1.然后去全排列,全排列的数列,假设每一个1的前面相应的0大于等于1,那么就是满足的序列.假设把0看成入栈,1看 ...
- hdu5240
想了辣么多 貌似就一个条件 #include<bits/stdc++.h> using namespace std; int flag=0;int main(){int t,n,kase= ...
- nyoj--1087--摆方格(规律)
摆方格 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角 ...
- calender怎么获取每周的周日(给每周的周日特定时间点设置定时)
获取每周的周日 //如果是周日,特殊处理.老外的周日-周六为一周 calendarTemp.add(Calendar.WEEK_OF_MONTH,1); calendarTemp.set(Calend ...
- Android 手势
GestureDetector:手势监听类,通常在View的setOnTouchListener方法中设置TouchListener,在TouchListener的onTouch函数中把MotionE ...