http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1132

题意是给定a,b,l,r求[l,r]内有几个整数可以表示成ax+by(x,y为非负整数)。

直接算l<=ax+by<=r会重复计算一个数的多种表示方法,而两种表示方法(x,y)总是相差k*(b/gcd(a,b),-a/gcd(a,b)),因此可以限制y取最小值进行去重

即x>=0,y>=0,l<=ax+by<=r,y<a/gcd(a,b)五个半平面的交的整点个数,可以分类一下然后用类欧几里德算法计算。

  1. #include<stdio.h>
  2. typedef __int128 i64;
  3. i64 f(i64 a,i64 b,i64 c,i64 n){
  4. if(!a||n<)return ;
  5. i64 s=;
  6. if(a>=c)s+=a/c*(n+)*n/,a%=c;
  7. if(b>=c)s+=b/c*(n+),b%=c;
  8. i64 m=(a*n+b)/c;
  9. return s+n*m-f(c,c-b-,a,m-);
  10. }
  11. i64 gcd(i64 a,i64 b){
  12. for(i64 c;b;c=a,a=b,b=c%b);
  13. return a;
  14. }
  15. i64 g(i64 a,i64 b,i64 c){
  16. c+=b;
  17. return f(a,c%a,b,c/a);
  18. }
  19. i64 cal(i64 a,i64 b,i64 c){
  20. i64 z=a/gcd(a,b)-;
  21. if(b*z>c)return g(a,b,c);
  22. i64 p=(c-b*z)/a+;
  23. return p*(z+)+g(a,b,c-a*p);
  24. }
  25. int main(){
  26. int T;
  27. long long a,b,x,y;
  28. for(scanf("%d",&T);T;--T){
  29. scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
  30. i64 ans=cal(a,b,y)-cal(a,b,x-);
  31. int ss[],sp=;
  32. do ss[++sp]=ans%+;while(ans/=);
  33. while(sp)putchar(ss[sp--]);
  34. putchar();
  35. }
  36. return ;
  37. }

51nod 1132 覆盖数字的数量 V2的更多相关文章

  1. 51nod-1131: 覆盖数字的数量

    [传送门:51nod-1131] 简要题意: 给出A,B,表示有一个区间为A到B 给出X,Y,表示有一个区间为X到Y 求出X到Y中能够被A到B中的数(可重复)相加得到的不同的数的个数 题解: 乱搞题, ...

  2. 51nod 1770 数数字

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

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

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

  4. 51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)

    接上一篇,那个递推式显然可以用矩阵快速幂优化...自己随便YY了下就出来了,学了一下怎么用LaTeX画公式,LaTeX真是个好东西!嘿嘿嘿 如上图.(刚画错了一发...已更新 然后就可以过V2了 or ...

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

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

  6. 51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 1084 矩阵取数问题 V2  基准时间限制:2 秒 空 ...

  7. [51nod1197]字符串的数量 V2

    用N个不同的字符(编号1 - N),组成一个字符串,有如下要求: (1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符.如果不作为结尾字符而是中间的字符,则该字符后面可以 ...

  8. 51nod 1061 最复杂的数V2

    题目链接 51nod 1061 题面简述 求\([1, n]\)中约数个数最多的数. \(n \le 10^{200}\) 题解 首先,答案一定是一个反素数. 什么是反素数? 一个正整数\(x\)是反 ...

  9. 51nod 1218 最长递增子序列 V2——LIS+思路(套路)

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1218 自己怎么连这种 喜闻乐见的大水题 都做不出来了…… 好像见过 ...

随机推荐

  1. css有缝隙

  2. doc四则运算

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.ut ...

  3. next_permutation函数和per_permiutation函数

    next_permutation用于求有序数组里面的下一个排序,形式为next_permutation(数组名,数组名+n)

  4. java-方法重写的注意事项

    1.父类中私有方法不能被重写.因为父类的私有方法子类根本就无法继承. 2.子类重写父类方法时,访问权限不能更低.最好就一致. 3.父类静态方法,子类也必须通过静态方法进行重写.其实这个算不上方法重写, ...

  5. php基础-2

    php的逻辑运算 &&符号 <?php function tarcrnum() { for ($i = 0; $i <= 100; $i++) { if ($i % 2 = ...

  6. 转载《Oracle的tnsnames.ora配置(PLSQL Developer)》

    源地址:https://www.cnblogs.com/qq3245792286/p/6212617.html. 首先打开tnsnames.ora的存放目录,一般为D:\app\Administrat ...

  7. struts2文件上传1

    <form action="hello/UploadAction_upload.action" enctype="multipart/form-data" ...

  8. Math.floor(-8.5)=多少?

    Math.floor()   表示向下取整,返回double类型   (floor---地板)  Math.ceil()   表示向上取整,返回double类型    (ceil---天花板)  Ma ...

  9. 网站基于vs,复选框,单选款

    前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.a ...

  10. pycharm Process finished with exit code (0xC0000005)

    pycharm  Process finished with exit code  (0xC0000005)解决办法 上次报过这个错误,是在安装浏览器时发现的,报过同样的错误.按当时的方法,以为切地解 ...