uva 11768
// 扩展欧几里得算法
// 先求出一个解 再求出区间 [x1,x2]有几个整数符合条件
// 需要注意的是 水平和垂直2种情况的处理 还有正数和负数取整的细微差别
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 1000010
#define maxm 48010
#define LL long long
LL ax,ay,bx,by;
LL a,b,c;
LL d,x,y;
void extendGcd(LL a,LL b){
if(b==){
d=a;
x=;
y=;
}else{
extendGcd(b,a%b);
LL t=x;
x=y;
y=t-a/b*y;
}
}
LL lt(double p){
if(p>){
LL x=p+0.05;x=x*;
LL y=(p+0.05)*;
if(x==y) return x/;
return x/+;
}
else{
return (LL)(p-0.05);
}
}
LL rt(double p){
if(p>=)
return (LL)(p+0.05);
else {
LL x=p-0.05;x=x*;
LL y=(p-0.05)*;
if(x==y) return x/;
return x/-;
}
}
LL get(double d){
if(d>=) return (d+0.05)*;
else return (d-0.05)*;
}
int main(){ int T;
double x1,y1,x2,y2;
LL ax,ay,bx,by;
LL a,b,c;
scanf("%d",&T);
while(T--){
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
ax=get(x1);ay=get(y1);
bx=get(x2);by=get(y2);
if(ay==by){
if(ay%) { printf("0\n");continue;}
LL lx=lt(min(x1,x2)),rx=rt(max(x1,x2));
if(lx==rx&&ay%){printf("0\n");continue;}
printf("%lld\n",rx-lx+);
continue;
}
else if(ax==bx) {
if(ax%) { printf("0\n");continue;}
LL ly=lt(min(y1,y2)),ry=rt(max(y1,y2));
if(ly==ry&&ax%){printf("0\n");continue;}
printf("%lld\n",ry-ly+);
continue;
} a=(ay-by)*;
b=(bx-ax)*;
c=(bx-ax)*ay-(by-ay)*ax; extendGcd(a,b);
if(c%d!=){printf("0\n");continue;}
x=x*(c/d);
LL m=b/d;
LL lx=lt(min(x1,x2)),rx=rt(max(x1,x2));
if(m<) m=-m;
x=x-(x-lx)/m*m;
x-=m;
while(x<lx)
x+=m;
LL k=(rx-x)/m;
while(x+k*m<=rx) k++;
printf("%lld\n",k);
}
return ;
}
uva 11768的更多相关文章
- UVA 11768 - Lattice Point or Not(数论)
UVA 11768 - Lattice Point or Not option=com_onlinejudge&Itemid=8&page=show_problem&categ ...
- UVA 11768 Lattice Point or Not(扩展欧几里德)
将直线转化为ax + by = c的形式,然后扩展欧几里得求在[x1, x2]之间的解 对直线与坐标轴平行的特判 调试了好长时间,注意: 1 正负数转化为整型的处理 2 注意判断有无解 #includ ...
- UVA 11768 - Lattice Point or Not
首先本题需要用到扩展欧几里得算法…… 关于exgcd算法的一点简略证明: 那么,对于函数exgcd(a,b)=(d,x,y),其中d满足d=gcd(a,b); (x,y)满足ax+by=d; 则exg ...
- Lattice Point or Not UVA - 11768(拓展欧几里得)
原文地址:https://www.cnblogs.com/zyb993963526/p/6783532.html 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB ...
- UVa 11768 格点判定(扩展欧几里得求线段整点)
https://vjudge.net/problem/UVA-11768 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB穿过多少个整点. 思路: 做了这道题之后 ...
- UVA - 11768 Lattice Point or Not (扩展欧几里得)
求一条线段上有多少个整点. 是道扩欧基础题,列出两点式方程,然后分四种情况讨论即可.但细节处理较多很容易写挫(某zzWA了十几发才过掉的). 由于数据精度较小,浮点数比较没有用eps,直接==比较了. ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
随机推荐
- VB程序破解之API断点[bp __vbaVarTstEq]
软件名称:风云足彩1.7软件大小:2.1M下载地址:http://free.ys168.com/?zhinengxuanhao软件保护:注册码编写软件:Microsoft Visual Basic 5 ...
- window dos 设置网络
->netsh ->pushd interface ip ->set address "本地连接" static 192.168.1.2 255.255.255. ...
- 【c++基础】const、const指针、const引用
一.const常量 声明时必须同时初始化(和“引用”一样) 二.const指针 三.const引用 引用本身和引用的对象都是const对象,可以用字面值来赋给const引用(普通引用则不行) ; co ...
- Appium绑定
锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...
- POJ2752 Seek the Name,Seek the Fame KMP算法
KMP继续练手.题目问的是一个串前缀等于后缀的可能长度是哪些,输出来.题目考的是对KMP失配指针的理解,当最后一位失配(即'\0'那里)时,指针会移动到前缀对应匹配的部分,所以这个长度是我们要的,然后 ...
- Javascript的9张思维导图学习
思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...
- floodlight 中两个互相矛盾的地方
floodlight中,添加防火墙规则,0表示最高优先级,数字越大,优先级越低;但是在StaticFlowPusher中写flow的时候,0表示最低优先级,数字越大,优先级越高,32767为最高. f ...
- 李洪强iOS开发之OC[017]函数和方法的区别
// // main.m // 15 - 函数和对象的方法的区别 // // Created by vic fan on 16/7/12. // Copyright © 2016年 李洪强. ...
- 【动态规划】流水作业调度问题与Johnson法则
1.问题描述: n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业i所需的时间分别为ai和bi ...
- 64位下好神奇啊(增加了PatchGuard技术保护自己,SSDT是相对地址,参数通过寄存器与rdi来传递)
近期可能会有一个64位平台的驱动开发任务,找了些资料,对64位平台下的驱动开发略知一二了,好神奇. 一.在64位系统下,有一项PatchGuard技术,它是微软为了防止自己的代码被Patch,进而影响 ...