3526. 【NOIP2013模拟11.7A组】不等式(solve)

(File IO): input:solve.in output:solve.out

Time Limits: 1000 ms Memory Limits: 262144 KB

Description

小z热衷于数学。

今天数学课的内容是解不等式:L<=S*x<=R。小z心想这也太简单了,不禁陷入了深深的思考:假如已知L、R、S、M,满足L<=(S*x)mod M<=R的最小正整数x该怎么求呢?

Input

第一行包含一个整数T,表示数据组数,接下来是T行,每行为四个正整数M、S、L、R。

Output

对于每组数据,输出满足要求的x值,若不存在,输出-1。

Sample Input

1

5 4 2 3

Sample Output

2

Data Constraint

30%的数据中保证有解并且答案小于等于10^6;

另外20%的数据中保证L=R;

100%的数据中T<=100,M、S、L、R<=10^9。

题解

这道题网上有很多一样的题解,看了好久才明白,其实这题就是用类欧思想

题目所给的式子是

L≤(S∗x) mod M≤R

显然,若存在一个x满足L≤S∗x≤R,那么答案就是x

如果不存在,转化题目那条式子

L≤(S∗x) mod M≤R
⇒L≤S∗x−M∗y≤R
⇒−R≤M∗y−S∗x≤−L
⇒(−R mod S)≤(M∗y) mod S≤(−L mod S)

若能求出y,那么自然x就知道了,因为区间[L,R]中没有x的倍数

然后我们就可以用类欧几里得来求解了

之所以叫类欧,是因为欧几里得算法是用gcd(b,a mod b)来求gcd(a,b)

这题也类似

定义x=dfs(M,S,L,R),那么y=dfs(M,S,−R mod S+S,−L mod S+S)

于是

x=R+⌊M∗yS⌋

边界条件好多,具体可以看代码

代码

#include<cstdio>

long long dfs(long m,long s,long l,long r)
{ long long x,y;
if(l==0)return 0;
if(l>=m||l>r||s%m==0)return -1;
s%=m;
x=((l-1)/s)+1;
if(x*s<=r)
return x;
y=dfs(s,m,(-r)%s+s,(-l)%s+s);
if(y==-1)return -1;
x=(r+m*y)/s;
if(s*x-m*y>=l)return (x%m+m)%m;
else return -1;
} int main()
{ long tot,m,s,l,r;
freopen("solve.in","r",stdin);
freopen("solve.out","w",stdout);
scanf("%ld",&tot);
while(tot--){
scanf("%ld%ld%ld%ld",&m,&s,&l,&r);
if(r>=m)r=m-1;
printf("%lld\n",dfs(m,s,l,r));
}
return 0;
}

JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)的更多相关文章

  1. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  2. JZOJ 3508. 【NOIP2013模拟11.5B组】好元素

    3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms  Mem ...

  3. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  4. JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)

    3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...

  5. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  6. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨

    5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...

  7. JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列

    5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...

  8. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  9. [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)

    题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...

随机推荐

  1. 初识OpenGl

    函数命名规则 OpenGl函数都遵循一个命名约定:<库前缀> <根命令> <可选参数个数> <可选参数类型> 如:glColor3f() ,gl:核心库 ...

  2. Java面试题2-附答案

    JVM的内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.Java虚拟机栈: 线程私有:每个方法在执行的时候会创建一个栈帧,存储了局部变量表, ...

  3. Django实现注册,往邮箱发送验证链接

    由于最近要做个平台,在GitHub上下载了一个系统框架,想着为了安全,实现注册时往一个邮箱发送注册信息,由管理员来确认是否同意其注册. 感谢博主:https://blog.csdn.net/geek_ ...

  4. RELAX NG

    RELAX NG (读作"relaxing"), 是一种基于语法的XML模式语言,可用于描述.定义和限制XML词汇表. 最初的XML模式语言是DTD,但是因为DTD语法丑陋, 表达 ...

  5. [LC] 1099. Two Sum Less Than K

    Given an array A of integers and integer K, return the maximum S such that there exists i < j wit ...

  6. 吴裕雄--天生自然python学习笔记:python文档操作表格处理

    表格也是 Word 文件中常用的对象,下面讲解 Win32com 中常用的表格操作命令 . 新建表格的语法为: 在 Word 文件中新建一个表格并插入单元格内容 在 Word 文件中新建一个 3 行 ...

  7. CF-551:部分题目总结

    题目链接:http://codeforces.com/contest/1153 A .Serval and Bus pro:给出n种公交车的首班车时间和两班车之间的时间间隔,找t时间以后的第一辆车是第 ...

  8. python之event事件

    同进程的一样,线程的一个关键特性是每个线程都是独立运行且状态不可预测.如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手.为了解决这些问题,我们需 ...

  9. python反转链表和成对反转

    https://www.cnblogs.com/tianqizhi/p/9673894.html https://blog.csdn.net/weixin_34168700/article/detai ...

  10. python 前端素材提供

    小图标素材:http://fontawesome.dashgame.com/