题意:求解方程ax+by+c=0,在区间x1->x2和y1->y2的解的个数。

看似简单,真心a的不容易啊!

开始跪于第8组数据,原因是没用long long !后来改了,跪于12组,超时,于是,换方法,求出x的解,对应到y

,然后算在y1,y2的解有几个(不要用枚举法,算有几个就行)。竟然又跪于第4组数据!!哎,弱爆了。

才发现,x对应过去的y,x递增,y未必也递增,也未必递减啊!!

做线方程总结:

先判断有无解,再约分后得 ax+by=c,用扩展欧几里得求得ax+by=1的一解,x=x*c,y=y*c,便是原方程一组解了,

每俩个相邻解x,相差|b|,同理,y差|a|,然后就是看题目要求了,见招拆招了,如想要到去某点附近的解,

可以 x=x-(x1-x)/abs(b)*abs(b);(可能左右)。

#include<iostream>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
void exgcd(long long a,long long b,long long &x,long long &y)
{
if(b==0){x=1;y=0;}
else
{
exgcd(b,a%b,y,x);y=y-x*(a/b);
}
}
inline long long getabs(long long a)
{
return a<0?-a:a;
}
int main()
{
long long a,b,c,x1,x2,y1,y2;
cin>>a>>b>>c>>x1>>x2>>y1>>y2;
long long x,y;
c=-c; //移项
if(x1>x2||y1>y2){cout<<0<<endl;return 0;} //排除无解的情况
if(a==0&&b==0) //特殊情况讨论
{
long long ans=0;
if(c==0)
{
ans=(x2-x1+1)*(y2-y1+1); //此处任意组合都可以
}
cout<<ans<<endl;
return 0;
}
if(a==0)
{
if(c%b!=0){cout<<0<<endl;return 0;}
else
{
y=c/b;
if(y>=y1&&y<=y2)
cout<<x2-x1+1<<endl;
else cout<<0<<endl;
return 0;
}
}
if(b==0)
{
if(c%a!=0){cout<<0<<endl;return 0;}
else
{
x=c/a;
if(x>=x1&&x<=x2)cout<<y2-y1+1<<endl;
else cout<<0<<endl;
return 0;
}
}
long long g=getabs(gcd(a,b));
if(c%g!=0){cout<<0<<endl;return 0;}
a=a/g;b=b/g;c=c/g; //约去最大公约数 exgcd(a,b,x,y); //求得一组解
x=x*c;
y=y*c; //原方程一组解
x=x-(x-x1)/getabs(b)*getabs(b); //得与x1最近的一解x(x>=x1)
while(x<x1)x+=getabs(b);
if(x>x2){cout<<0<<endl;return 0;}
long long xx=x+(x2-x)/getabs(b)*getabs(b); //解x->xx(x>=x1,xx<=x2)
y=(c-a*x)/b; //对应yy,y,注意,此处yy,y大小不知道!!
long long yy=(c-a*xx)/b;
long long ans=0;
/* while(x<=xx) //若用枚举解,超时
{
if(y>=y1&&y<=y2)ans++;
x+=getabs(b);
y=(c-a*x)/b;
}*/
if(yy>y){long long temp=y;y=yy;yy=temp;} //大小决定一下
if(yy<y1) //取在区间y1->y2之间的解。(y,yy为边界解)
{
yy=yy+(y1-yy)/getabs(a)*getabs(a);
while(yy<y1)yy+=getabs(a);
}
if(y2<y)
{
y=y-(y-y2)/getabs(a)*getabs(a);
while(y>y2)y-=getabs(a);
}
if(y>=yy)
ans=(y-yy)/getabs(a)+1;
cout<<ans<<endl;
}

SGU 106 在区间范围内的线性方程解个数的更多相关文章

  1. 扩展欧几里德 SGU 106

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=106   题意:求ax + by + c = 0在[x1, x2], [y1, y2 ...

  2. SGU 106 The equation

    H - The equation Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Subm ...

  3. HDU4622:Reincarnation(后缀数组,求区间内不同子串的个数)

    Problem Description Now you are back,and have a task to do: Given you a string s consist of lower-ca ...

  4. echarts renderItem-在区间段内展示连续数据

    一.需求背景: 贴图说明:要求数据在不同类型的区间段内展示. 二.实现思路及代码 实现方法: 利用echarts的自定义配置:option.series[i].type='custom'中的rende ...

  5. 区间求小于等于k的数字个数 hdu4177

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目意思给出一个序列,叫我们求一个区间里面小于等于k的数字个数. 这里面我用分块和主席树两种方法 ...

  6. hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙

    /** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...

  7. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  8. “全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. HDU 4417.Super Mario-可持久化线段树(无修改区间小于等于H的数的个数)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. 79 最长公共子串 (lintcode)

    f[i][j]表示的是以第i个结尾和第j个结尾 class Solution { public: /* * @param A: A string * @param B: A string * @ret ...

  2. 利用python进行数据分析3_Pandas的数据结构

    Series #通过list构建Series ser_obj=pd.Series(range(10,20)) print(type(ser_obj))#<class 'pandas.core.s ...

  3. soapui测试https双向验证p12项目

    1.准备好p12 和jsk秘钥文件 2.配置soapui ssl 其中: 1:jks就是放在trustStore那里,密码填写为 106075 2:p12放到keystore,密码填写:180000 ...

  4. Codeforces Round #273 (Div. 2)-A. Initial Bet

    http://codeforces.com/contest/478/problem/A A. Initial Bet time limit per test 1 second memory limit ...

  5. HTTP协议详解-基础知识

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.绝大多数的Web开发,都是构建在HTTP协议之上的Web应用. HTTP协议的主要特点可概括如下: 简单: ...

  6. ueditor中FileUtils.getTempDirectory()找不到

    2014-6-27 14:22:25 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() fo ...

  7. Avada v5.0.6 最新版本破解教程如下:

    Avada v5.0.6 最新版本破解教程如下: .找到\themes\Avada\includes\avada-envato-api.php文件,注释掉如下两行代码 $response_code = ...

  8. vue 封装分页组件

    分页 一般都是调接口, 接口为这种格式 {code: 0, msg: "success",…} code:0 data:{ content:[{content: "11& ...

  9. HDU-1455-木棒

    这题的话,我们,定义一个结构体,然后把木棒从大到小排序. 这些木棒如果是由多根等长木棒组成的,那目标长度一定大于等于其中最长的木棒长度,所这就是我们搜索的下限. 上限就是所有的木棒组成了一根木棒,就是 ...

  10. 笛卡尔&小雷:科学发展有规律,研究科学有方法

    一直在总结自己的学习和研究方法,最近在读吴军写的<文明之光> ,感觉这篇介绍笛卡尔的内容非常有价值,特此整理.最近开始在密谋自己的理论体系,低调实施中...  笛卡尔按照感知的方式,把人的 ...