斩杀线计算大师 三元一次方程解
https://ac.nowcoder.com/acm/contest/4853/D
已知a b c k 求出x y z。
考虑ax+by+cz=k,那么我们移项得ax+by=k-cz,如果k在剪掉cz之后依然存在解。
那么gcd(a,b)∣k-cz。
设g=gcd(a,b)那么现在就是求Tg+cz=k的解,
并且要保证z尽量小。我们做一次exgcd就行了。
接下来就是求ax+by=k-cz的非负解,再做一次exgcd就行了。
如果要保证做法正确的话,需要用a,b,c分别作为第三个数去求解。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstring>
using namespace std;
typedef long long ll;
int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}
int exgcd(int a,int b,ll &x,ll &y)
{if(!b){x=1;y=0;return a;}int r=exgcd(b,a%b,y,x);y-=a/b*x;return r;
}
int a, b, c;
ll k, x, y;
ll resx, resy, resz;
bool solve(int a, int b, int c, ll k) {ll d = gcd(a, b);ll r = exgcd(d, c, x, y);y *= k / r;y=(y%(d/r)+d/r)%(d/r);//求出z的最小值 resz = y;k -= c * y;d = exgcd(a, b, x, y);x*=k/d;x=(x%(b/d)+b/d)%(b/d);//求出x的最小值 y=(k-a*x)/b;resx = x, resy = y;if (resx >= 0 && resy >= 0 && resz >= 0)return true;return false;
}
int main()
{scanf("%d %d %d %lld", &a, &b, &c, &k);if (solve(a, b, c, k)) {printf("%lld %lld %lld\n", resx, resy, resz);return 0;}if (solve(a, c, b, k)) {printf("%lld %lld %lld\n", resx, resz, resy);return 0;}if (solve(b, c, a, k)) {printf("%lld %lld %lld\n", resz, resx, resy);return 0;}return 0;
}
斩杀线计算大师 三元一次方程解相关推荐
- 牛客练习赛60 ~ 斩杀线计算大师
题目传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 算 ...
- 牛客练习赛60 D斩杀线计算大师
链接 点击跳转 题解 出题人的做法被hack了,不过幸亏他写了spj,数据可以保证是对的 这题的同余最短路做法是对的,而且还挺裸 关于同于最短路看这里 代码 #include <bits/std ...
- c语言解三元一次方程组_在R里面对三元一次方程求解
三元一次方程大家应该是不陌生的,形如 aX + bY + cZ = d 的就是,其中X,Y,Z是未知的变量,a,b,c,d 都是已知的常量,通常呢,需要至少3个没有线性关系的已知等式才能求唯一解.例如 ...
- 方程组的直接解法和迭代法 python_基于任务驱动的翻转课堂线上教学 ——以《解二元一次方程组复习课》为例...
基于任务驱动的翻转课堂线上教学 --以<解二元一次方程组复习课>为例 1 线上教学案例设计前的思考 疫情期间,一家长群对一元一次方程和二元一次方程组进行了讨价还价,认为学个知识点还收起费来 ...
- 用python解三元一次方程并绘图_用for循环解三元一次方程组题目的思路
用程序的思路去解决方程 一开始我碰到三元一次方程组相关的题目我是非常懵逼的,因为当年学的编程数学全还给老师了,自己用数学方法都解不出来,更何况用程序解了. 然而,在尝试用程序解题的过程中,赫然发现,只 ...
- 用for循环解三元一次方程组题目的思路
用程序的思路去解决方程 一开始我碰到三元一次方程组相关的题目我是非常懵逼的,因为当年学的编程数学全还给老师了,自己用数学方法都解不出来,更何况用程序解了. 然而,在尝试用程序解题的过程中,赫然发现,只 ...
- 解三元一次方程组的算法,C语言,Python,Java实现
解三元一次方程组是数学中的一个重要问题,在许多实际应用中都有广泛的应用.比如,化学反应.工程设计.地理测量等都需要求解方程组.本文将分别用C语言.Python和Java实现解三元一次方程组的算法. 解 ...
- 解三元一次方程组的计算机,解三元一次方程组
三元一次方程组解法 主要的解法就是加减消元法和代入消元法,通常采用加减消元法,若方程难解就用代入消元法,因题而异.其思路 都是利用消元法逐步消元. 三元一次方程组的应用 三元一次方程简单应用 {x+2 ...
- c语言编程解三元一次方程组,三元一次方程组的解是 [] A.B.C.D
三元一次方程: 含有三种不同字母构成的方程,并且含有未知数的项的次数是1的整式方程,一般有三条三元一次方程才能解出未知数的解,我们那这种方程叫三元一次方程,如x+y-z=1,2a-3b+c=0等都是三 ...
最新文章
- Matlab编程与数据类型 -- 函数M文件的组成
- js控制鼠标移动_原生JS封装可拖拽效果
- python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
- k8s sealos应用安装及应用包制作教程
- 利用python将txt文件中的内容写入Excel文件中
- 【Java基础】 JQuery的常用操作
- 88.搭建git服务器 安装与使用gitlab gitlab备份与恢复
- ADO.NET Entity Framework 学习(1)
- C1007: 无法识别的标志“-Ot”
- WebService与RestAPI 、SoapAPI
- arcgis里面如何删除标记_ArcGIS技术篇——标记符号制作
- IndentationError:unindent does not match any outer indentation解决方案
- 嵌入式学习笔记7——LCD1602液晶屏
- killall为什么有时候会找不到进程?
- Java语言制作动画
- 计算机声音在线模拟,计算机声场模拟软件ODEON及其应用.pdf
- 使用树莓派4b和OpenCV做机械臂夹取
- 洛谷刷题——P1255 数楼梯
- Solidity如何通过代码减少gas消耗
- 【数据结构与算法】二叉树题目很难?一句话秒杀基础二叉树题目