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==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: 覆盖数字的数量相关推荐
- 求2+22+222+2222+22222+...+2...2的和,数字的数量由控制台输入
public class HardThree {// 求2+22+222+2222+22222+...+2...2的和,数字的数量由控制台输入public static void main(Strin ...
- Golang 统计字符串中数字字母数量
文章目录 1.需求说明 2.实现 2.1 ASCII 码值 2.2 正则表达式 3.性能对比 4.小结 参考文献 1.需求说明 记录一下项目对用户 UGC 文本进行字数限制的具体实现. 不同的产品,出 ...
- 华为全新发布开源操作系统欧拉:覆盖数字基础设施全场景
来源:C114通信网(C114-weixin) 作者:舒允文 在华为全联接2021上,面向数字基础设施的开源操作系统欧拉(openEuler)全新发布.欧拉操作系统可广泛部署于服务器.云计算.边缘计算 ...
- vim匹配数字及数量限制
问题:需要删除邮件域名为纯数字的行 g/@\d\+\.com 这样就实现了目的 元字符 说明 * 匹配0-任意个 \+ 匹配1-任意个 \? 匹配 ...
- 51nod 1770 数数字
统计一下 aaa ⋯ aaan个a × baaa ⋯ aaa⏟n个a × b 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=999 ...
- 51nod 1770数数字(找规律)
1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注 统计一下 aaa ⋯ aaa n个a × b 的结果里面有多少个数字d,a,b,d均为 ...
- 51nod 1371 填数字(三维 dp)
1371 填数字 有n行格子,第i(1<=i<=n)行有i个格子,每行格子是左对齐.现在要在每一个格子填入一个非负整数,最后使得每一行每一列的和都不超过2. 请计算有多少种方案,答案比较大 ...
- 从1~ 50之间的数字中取6个数字 结果数量
数学 简单的组合公式. C(50,6) = 50! / (6! x 44!) = (50×49×48×47×46×45) / (1×2×3×4×5×6) 编程 一般情况下, 如果从n个数字中抽取k个数 ...
- Java“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码 组成。红色球号码从 1—33 中选择,蓝色球号码从 1—16 中选择。 球的数字匹配数量和颜色决定了是否中奖,具体中奖规则:
package com.zx;import java.util.Random; import java.util.Scanner;/*** @author CaesarChang* @data 202 ...
- 51nod 1770 数数字 找规律,注意进位,时间复杂度O(n)
题目: 这题很简单,找规律即可. 考虑两次进位: 1.a*b时的进位. 2.aa*b时加法时进位. 代码: #include <bits\stdc++.h> using namespace ...
最新文章
- 谈Elasticsearch下分布式存储的数据分布
- linux下动态链接库(.so)的显式调用和隐式调用
- UINavigationController的简单使用
- Android热更新开源项目Tinker集成实践总结
- 我的内核学习笔记3:我的platform驱动模板文件
- 微信小程序wx.request请求服务器json数据并渲染到页面
- mssql 取数据指定条数(例:100-200条的数据)
- android蓝牙5.0扫描失败,bluetooth-lowenergy – BLE扫描的解决方案SCAN_FAILED_APPLICATION_REGISTRATION_FAILED?...
- 【全网最强C语言学习】C语言入门(工具)——库函数字典MSDN
- SCRUM敏捷开发教程
- 参考文献在论文中进行引用标注
- 语义错误和语法错误的区别
- 闭环系统的零极点图判定稳定性_零极点与系统稳定关系 拉氏变换的收敛域...
- 网易云音乐PC客户端加密API逆向解析
- 使用matplotlib绘制高级图表8
- 布隆过滤器(Bloom Filter)
- idea的去除转义的复制粘贴
- python中什么函数表示求绝对值_python绝对值怎么计算
- 百度 android 市场,百度
- 恒生电子软件测试岗实习生面试(一对一)