【传送门: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==0||k==1){printf("%lld\n",max(0LL,Y-max(X,A)+1));continue;}LL sum=0;LL l,r,ans1,ans2,mid;l=1;r=k;ans1=-1;while(l<=r){mid=(l+r)/2;if(A*mid<=X) l=mid+1,ans1=mid;else r=mid-1;}l=1;r=k;ans2=-1;while(l<=r){mid=(l+r)/2;if(A*mid<=Y) l=mid+1,ans2=mid;else r=mid-1;}LL s=0;if(ans2==-1);else if(ans2<k){if(X<=ans1*B) s+=ans1*B-X+1;if(Y<=ans2*B) s+=Y-ans2*A+1;if(ans1+1<ans2) s+=(ans2-ans1-1)*(B-A+1);}else{if(ans1<k){LL s=Y-ans2*A+1;if(X<=ans1*B) s+=ans1*B-X+1;s+=(ans2-ans1-1)*(B-A+1);}else s=Y-X+1;}printf("%lld\n",s);}return 0;
}

转载于:https://www.cnblogs.com/Never-mind/p/9751494.html

51nod-1131: 覆盖数字的数量相关推荐

  1. 求2+22+222+2222+22222+...+2...2的和,数字的数量由控制台输入

    public class HardThree {// 求2+22+222+2222+22222+...+2...2的和,数字的数量由控制台输入public static void main(Strin ...

  2. Golang 统计字符串中数字字母数量

    文章目录 1.需求说明 2.实现 2.1 ASCII 码值 2.2 正则表达式 3.性能对比 4.小结 参考文献 1.需求说明 记录一下项目对用户 UGC 文本进行字数限制的具体实现. 不同的产品,出 ...

  3. 华为全新发布开源操作系统欧拉:覆盖数字基础设施全场景

    来源:C114通信网(C114-weixin) 作者:舒允文 在华为全联接2021上,面向数字基础设施的开源操作系统欧拉(openEuler)全新发布.欧拉操作系统可广泛部署于服务器.云计算.边缘计算 ...

  4. vim匹配数字及数量限制

    问题:需要删除邮件域名为纯数字的行 g/@\d\+\.com 这样就实现了目的 元字符  说明 *           匹配0-任意个 \+         匹配1-任意个 \?         匹配 ...

  5. 51nod 1770 数数字

    统计一下 aaa ⋯ aaan个a × baaa ⋯ aaa⏟n个a × b 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=999 ...

  6. 51nod 1770数数字(找规律)

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注 统计一下 aaa ⋯ aaa n个a × b 的结果里面有多少个数字d,a,b,d均为 ...

  7. 51nod 1371 填数字(三维 dp)

    1371 填数字 有n行格子,第i(1<=i<=n)行有i个格子,每行格子是左对齐.现在要在每一个格子填入一个非负整数,最后使得每一行每一列的和都不超过2. 请计算有多少种方案,答案比较大 ...

  8. 从1~ 50之间的数字中取6个数字 结果数量

    数学 简单的组合公式. C(50,6) = 50! / (6! x 44!) = (50×49×48×47×46×45) / (1×2×3×4×5×6) 编程 一般情况下, 如果从n个数字中抽取k个数 ...

  9. Java“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码 组成。红色球号码从 1—33 中选择,蓝色球号码从 1—16 中选择。 球的数字匹配数量和颜色决定了是否中奖,具体中奖规则:

    package com.zx;import java.util.Random; import java.util.Scanner;/*** @author CaesarChang* @data 202 ...

  10. 51nod 1770 数数字 找规律,注意进位,时间复杂度O(n)

    题目: 这题很简单,找规律即可. 考虑两次进位: 1.a*b时的进位. 2.aa*b时加法时进位. 代码: #include <bits\stdc++.h> using namespace ...

最新文章

  1. 谈Elasticsearch下分布式存储的数据分布
  2. linux下动态链接库(.so)的显式调用和隐式调用
  3. UINavigationController的简单使用
  4. Android热更新开源项目Tinker集成实践总结
  5. 我的内核学习笔记3:我的platform驱动模板文件
  6. 微信小程序wx.request请求服务器json数据并渲染到页面
  7. mssql 取数据指定条数(例:100-200条的数据)
  8. android蓝牙5.0扫描失败,bluetooth-lowenergy – BLE扫描的解决方案SCAN_FAILED_APPLICATION_REGISTRATION_FAILED?...
  9. 【全网最强C语言学习】C语言入门(工具)——库函数字典MSDN
  10. SCRUM敏捷开发教程
  11. 参考文献在论文中进行引用标注
  12. 语义错误和语法错误的区别
  13. 闭环系统的零极点图判定稳定性_零极点与系统稳定关系 拉氏变换的收敛域...
  14. 网易云音乐PC客户端加密API逆向解析
  15. 使用matplotlib绘制高级图表8
  16. 布隆过滤器(Bloom Filter)
  17. idea的去除转义的复制粘贴
  18. python中什么函数表示求绝对值_python绝对值怎么计算
  19. 百度 android 市场,百度
  20. 恒生电子软件测试岗实习生面试(一对一)

热门文章

  1. Java配置分离之Spring远程配置
  2. Mac 安装 MySQL
  3. Python获取Linux或Windows系统的基本信息
  4. cocos2dx 3.0 触摸机制
  5. 华硕笔记本 X550JD4710HQ
  6. day39-Spring 02-AOP的概述
  7. 内存的静态分配和动态分配的区别
  8. selenium webdriver学习(一)------------快速开始(转载JARVI)
  9. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限(转)
  10. Studio for WPF:使用 C1TileView 创建图片库