CF 7C Line(拓展欧几里得求线性方程)

2023-12-10 04:32

本文主要是介绍CF 7C Line(拓展欧几里得求线性方程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接:

http://codeforces.com/problemset/problem/7/C


题目大意:

给方程Ax + By + C = 0.  其中A,B,C为已知, 求x,y。


分析与总结:

拓展欧几里得算法的模板题。这个算法在数论书或者网上都可以找到。

该算法求出线性方程Ax + By = gcd(A, B);  

然后,这个方程可进行转换:

       Ax + By = gcd(A, B)

=>  Ax + By = -C/z, 其中-C/z = gcd(A, B)

=>  Ax*z + By*z = C.

其中x, y可以通过拓展欧几里得算法求出,

然后,我们只需要求出z, 而z = -C/gcd(A,B);

所以, 最终答案x = x*(-C/gcd(A,B)) ,  y = y*(-C/gcd(A,B));  


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const LL INF = 5*1e18;void gcd(LL a, LL b, LL& d,LL& x, LL& y){if(!b){d=a; x=1; y=0; }else {gcd(b,a%b,d,y,x); y -= x*(a/b); }
}int main(){LL a,b,c,d,x,y;cin >> a >> b >> c;gcd(a,b,d,x,y);if(c%d != 0)puts("-1");else cout << -x*(c/d) << " " << -y*(c/d) << endl;return 0;
}



 ——  生命的意义,在于赋予它意义士。

          原创 http://blog.csdn.net/shuangde800 , By   D_Double  (转载请标明)




这篇关于CF 7C Line(拓展欧几里得求线性方程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/476025

相关文章

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

最大公因数:欧几里得算法

简述         求两个数字 m和n 的最大公因数,假设r是m%n的余数,只要n不等于0,就一直执行 m=n,n=r 举例 以18和12为例 m n r18 % 12 = 612 % 6 = 06 0所以最大公因数为:6 代码实现 #include<iostream>using namespace std;/

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

【CF】E. Anya and Cubes(双向DFS)

根据题意的话每次递归分3种情况 一共最多25个数,时间复杂度为3^25,太大了 我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果 之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以 时间复杂度降低为 3 ^ (n/2+1) 题目链接:http://codeforces.com/contest/525/problem/E #include<set

【CF】D. Arthur and Walls(BFS + 贪心)

D题 解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为. 一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断 题目链接:http://codeforces.com/contest/525/problem/D #include<cstdio>#include<

多线程并发拓展

死锁 死锁是指两个或两个以上的进程,因争夺资源而造成一种互相等待的作用,如果没有外力作用它们都将无法推进下去,此时我们就称系统进入死锁状态 死锁必要条件 互斥条件:进程对所分配的资源进行排他性的使用,在一段时间内某资源只有一个资源占用,如果此时还有其它进程请求资源,那么请求者只能等待 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它资源占用,此时请求进程