luogu2833 等式
题目大意
给出\(a,b,c,x_1,x_2,y_1,y_2\),求满足\(ax+by+c=0\),且\(x\in[x1,x2],y\in [y1,y2]\)的整数解有多少对。
题解
用扩展欧几里得算法算出方程\(ax+by=-c\)的一个解,再将该解移动到题目所要求的范围内。具体操作看代码。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
#define NoAns {printf("0\n");return 0;}
ll Exgcd(ll a, ll b, ll &x, ll &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
ll d = Exgcd(b, a % b, x, y);
ll tx = x;
x = y;
y = tx - y * (a / b);
return d;
}
ll Gcd(ll a, ll b)
{
return b ? Gcd(b, a%b) : a;
}
bool Solve(ll a, ll b, ll c, ll &x, ll &y, ll &deltaX, ll &deltaY)
{
int gcd = Gcd(a, b);
if (c%gcd != 0)
return false;
Exgcd(a, b, x, y);//易忘点:好好下定义,传入的参数不是a%gcd,b%gcd
x *= c / gcd;
y *= c / gcd;
deltaX = b / gcd;
deltaY = -a / gcd;//易忘点:负号
return true;
}
ll MoveToRange(ll orgP, ll delta, ll l, ll r, ll toP, bool &moveFailed)
{
ll k = (toP - orgP) / delta;
int higherP = delta > 0 ? 1 : -1;
if (orgP + k * delta > r)
k-=higherP;//注意此处不能直接--,因为delta<0时k越小k*delta越大
else if (orgP + k * delta < l)
k+=higherP;
if (orgP + k * delta > r || orgP + k * delta < l)
moveFailed = true;
return k;
}
int main()
{
ll a, b, c, x1, x2, y1, y2;
scanf("%lld%lld%lld%lld%lld%lld%lld", &a, &b, &c, &x1, &x2, &y1, &y2);
if (x2 < x1 || y2 < y1)
NoAns
if (a == 0 && b == 0)
{
if (c == 0)
printf("%lld\n", (x2 - x1 + 1) * (y2 - y1 + 1));
else
NoAns
return 0;
}
if (a == 0)
{
if (c%b == 0 && y1 <= -c / b && -c / b <= y2)
printf("%lld\n", x2 - x1 + 1);
else
NoAns
return 0;
}
if (b == 0)
{
if (c%a == 0 && x1 <= -c / a && -c / a <= x2)
printf("%lld\n", y2 - y1 + 1);
else
NoAns
return 0;
}
ll x, y, deltaX, deltaY;
if (!Solve(a, b, -c, x, y, deltaX, deltaY))
NoAns
bool moveFailed = false;
ll kx1 = MoveToRange(x, deltaX, x1, x2, x1, moveFailed);
ll kx2 = MoveToRange(x, deltaX, x1, x2, x2, moveFailed);
ll ky1 = MoveToRange(y, deltaY, y1, y2, y1, moveFailed);
ll ky2 = MoveToRange(y, deltaY, y1, y2, y2, moveFailed);
if (moveFailed)
NoAns
if (kx1 > kx2)
swap(kx1, kx2);
if (ky1 > ky2)
swap(ky1, ky2);
ll kLow = max(kx1, ky1), kHigh = min(kx2, ky2);
if (kLow > kHigh)
NoAns
printf("%lld\n", kHigh - kLow + 1);
return 0;
}
luogu2833 等式的更多相关文章
- NOIP200806 火柴棒等式【B005】
[B005]火柴棒等式[难度B]———————————————————————————————————————————————————————————— [题目要求] 给你n根火柴棍,你可以拼出多少个 ...
- BZOJ2118墨墨的等式[数论 最短路建模]
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1317 Solved: 504[Submit][Status][Discus ...
- 【bzoj2118】 墨墨的等式
http://www.lydsy.com/JudgeOnline/problem.php?id=2118 (题目链接) 题意 给出${B}$的取值范围${[Bmin,Bmax]}$,求方程${a_{1 ...
- Bzoj2118 墨墨的等式
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1488 Solved: 578 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+ ...
- NOIP2008提高组火柴棒等式(模拟)——yhx
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- 数论+spfa算法 bzoj 2118 墨墨的等式
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1283 Solved: 496 Description 墨墨突然对等式很感兴 ...
- TYVJ P1012 火柴棒等式 Label:枚举
背景 NOIP2008年提高组第二题 描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法 ...
- noip2008 火柴棒等式
P1149 火柴棒等式 1.9K通过 3.7K提交 题目提供者该用户不存在 标签搜索/枚举模拟2008NOIp提高组 难度普及- 提交该题 讨论 题解 记录 题目描述 给你n根火柴棍,你可以拼出多 ...
- SCAU 1138 代码等式
1138 代码等式 时间限制:500MS 内存限制:65536K提交次数:59 通过次数:21 题型: 编程题 语言: 无限制 Description 一个代码等式就是形如x1x2...xi=y ...
随机推荐
- 前端面试基础-html篇之H5新特性
h5的新特性(目前个人所了解)如下 语义化标签 表单新特性 视频(video)和音频(audio) canvas画布 svg绘图 地理定位 为鼠标提供的拖放API webworker (重点)Stor ...
- P1146 硬币翻转
题目描述 在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上.现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然).求一个最短的操作序列(将每次翻 ...
- poj3669 广搜
//好久没刷题了,生疏了. 题意分析: 题意理解为在一个二维的正向坐标轴上,一个点(流星)连同它的上下左右的四个点会在某一个时刻被破坏.一个人在原点,问她到达安全区的最小时间是多少. 代码思路: 从原 ...
- DeltaFish 校园物资共享平台 第五次小组会议
软工第五次小组会议 记录人:娄雨禛 会议地点:三教讨论区 会议时间:9:00-10:00 与会人员:软工小组成员 一.前端会议提要 前端分为“2+2”组合进行开发. 底层设计:齐天扬,刘鼎乾 界面美化 ...
- 存档:Telerik Test Studio的摸索笔记
http://www.51testing.com/?uid-170604-action-spacelist-starttime-1328025600-endtime-1330531200 http:/ ...
- 三维重建面试4:Jacobian矩阵和Hessian矩阵
在使用BA平差之前,对每一个观测方程,得到一个代价函数.对多个路标,会产生一个多个代价函数的和的形式,对这个和进行最小二乘法进行求解,使用优化方法.相当于同时对相机位姿和路标进行调整,这就是所谓的BA ...
- vue2.0模拟锚点实现定位平滑滚动
vue2.0模拟锚点实现定位平滑滚动 效果为点击哪一个标题,平滑滚动到具体的详情. 如果是传统项目,这个效果就非常简单.但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 anima ...
- 数据库操作(一)DML
1.数据库 数据库可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作. 所谓“数据库”是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与 ...
- 【剑指Offer】25、复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节 ...
- webstorm中vue项目--运行配制
## npm搭建的项目,需要运行npm run dev来启动 webstorm作为一款优秀的编辑器,通过配置运行设置,达到一键运行 1.添加node.js配置 2.configuration-> ...