SGU 106 The Equation 扩展欧几里得应用
Sol:线性不定方程+不等式求解
证明的去搜下别人的证明就好了。。。数学题。
#include <algorithm>
#include <cstdio>
#include <iostream> using namespace std; long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
if(a==0&&b==0) return -1;
if(b==0){x=1;y=0;return a;}
long long d=extend_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
} long long a,b,c,x1,x2,y1,y2,ans; int main()
{
cin>>a>>b>>c>>x1>>x2>>y1>>y2;
c=-c;
if(a==0&&b==0)
{
if(c==0) ans=(x2-x1+1)*(y2-y1+1);
}
else if(a==0)
{
if(c%b==0&&c/b>=y1&&c/b<=y2)
ans=x2-x1+1;
}
else if(b==0)
{
if(c%a==0&&c/a>=x1&&c/a<=x2)
ans=y2-y1+1;
}
else
{
long long x=0,y=0;
long long d=extend_gcd(a,b,x,y);
if(c%d==0)
{
long long X=x*(c/d);
long long Y=y*(c/d);
long long k1,k2,k3,k4;
if(x1<=X||(x1-X)*d%b==0)
k1=(x1-X)*d/b;
else
k1=(x1-X)*d/b+1;
if(x2>=X||(X-x2)*d%b==0)
k2=(x2-X)*d/b;
else
k2=(x2-X)*d/b-1;
if(y1<=Y||(y1-Y)*d%a==0)
k3=(Y-y1)*d/a;
else
k3=(Y-y1)*d/a-1;
if(y2>=Y||(Y-y2)*d%a==0)
k4=(Y-y2)*d/a;
else
k4=(Y-y2)*d/a+1;
if(k1>k2) swap(k1,k2);
if(k3>k4) swap(k3,k4);
ans=min(k2,k4)-max(k1,k3)+1;
}
}
printf("%I64d\n",ans);
return 0;
}
SGU 106 The Equation 扩展欧几里得应用的更多相关文章
- SGU 106 The equation 扩展欧几里得好题
扩展欧几里得的应用……见算法竞赛入门经典p.179 注意两点:1.解不等式的时候除负数变号 2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 ...
- SGU 106 The equation 扩展欧几里德
106. The equation time limit per test: 0.25 sec. memory limit per test: 4096 KB There is an equation ...
- SGU 140 扩展欧几里得
题目大意: 给定序列a[] , p , b 希望找到一个序列 x[] , 使a1*x1 + a2*x2 + ... + an*xn = b (mod p) 这里很容易写成 a1*x1 + a2*x2 ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- [codeforces 200 E Tractor College]枚举,扩展欧几里得,三分
题目出自 Codeforces Round #126 (Div. 2) 的E. 题意大致如下:给定a,b,c,s,求三个非负整数x,y,z,满足0<=x<=y<=z,ax+by+cz ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
- UVA 12169 Disgruntled Judge 枚举+扩展欧几里得
题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...
- UVA 10090 Marbles 扩展欧几里得
来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...
随机推荐
- struts2自己定义类型转换器
1.1. struts2自己定义类型转换器 1) 自定类型转换类,继承DefaultTypeConverter类 package com.morris.ticket.conversio ...
- 程序中的Cookie 和Session
这几天回家休息后,想想放假之前的几天,主要看的一些工作上的东西,发现对Session和Cookie这两个东西,我还是很陌生.恩,趁着有网,看了点相关的资料,打算整理下.一翻博客,发现已经有前辈已经对这 ...
- js中new构造函数的研究
<javascript高级编程>里对new操作符的解释: new操作符会让构造函数产生如下变化: 1. 创建一个新对象: 2. 将构造函数的作用域赋给新对象(因此t ...
- 最简单的javascript 竖向菜单
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- JavaSE学习总结第16天_集合框架2
16.01 ArrayList存储字符串并遍历 ArrayList类概述:底层数据结构是数组,查询快,增删慢,线程不安全,效率高 ArrayList类是List 接口的大小可变数组的实现.实现了所 ...
- [C#参考]字符编码
微软的那个臭屁的JOEL(就是写<JOEL说软件>的那个牛人)曾说:“每一位软件开发人员必须.绝对要至少具备UNICODE与字符集知识(没有任何例外)”,我也常常困扰于字符集的转换等很多问 ...
- C#后台跳转
后台跳转的方法: 1.js脚本 [不推荐使用] Context.Response.Write("<script language=javascript>window.locati ...
- Web开发在线工具
JSON: JSON格式化工具 JSON检验并格式化工具 专为Web开发者准备的 63个免费在线工具
- 网站压力测试之ApacheBench
ApacheBench是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求.使用yum安装apache,ab工具在/us ...
- Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
原文 Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.ms ...