【exgcd 扩展欧几里得算法】[ABC340F] S = 1 题解

题意

给定 ( X , Y ) (X,Y) (X,Y),其中 X , Y X,Y X,Y 为整数。求整数 A , B A,B A,B 使得由 ( 0 , 0 ) , ( X , Y ) , ( A , B ) (0,0),(X,Y),(A,B) (0,0),(X,Y),(A,B) 三个点构成的三角形面积为 1 1 1

思路

( X , Y ) , ( A , B ) (X,Y),(A,B) (X,Y),(A,B) 看作 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),考虑 y = k x + b y = kx + b y=kx+b ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),根据求一次函数解析式得

{ k = y 2 − y 1 x 2 − x 1 b = x 2 y 1 − y 2 x 1 x 2 − x 1 \begin{cases}k = \dfrac{y_2 - y_1}{x_2 - x_1}\\ b = \dfrac{x_2y_1 - y_2x_1}{x_2 - x_1}\end{cases} k=x2x1y2y1b=x2x1x2y1y2x1

考虑函数与 x x x 轴交点,令交于 ( t , 0 ) (t,0) (t,0),则 t k + b = 0 tk + b = 0 tk+b=0 t ( y 2 − y 1 ) x 2 − x 1 + x 2 y 1 − y 2 x 1 x 2 − x 1 = 0 \dfrac{t(y_2 - y_1)}{x_2 - x_1} + \dfrac{x_2y_1 - y_2x_1}{x_2 - x_1} = 0 x2x1t(y2y1)+x2x1x2y1y2x1=0

t ( y 2 − y 1 ) + ( x 2 y 1 − y 2 x 1 ) = 0 t(y_2 - y_1) + (x_2y_1 - y_2x_1) = 0 t(y2y1)+(x2y1y2x1)=0

解得
t = − ( x 2 y 1 − y 2 x 1 ) ( y 2 − y 1 ) t = -\dfrac{(x_2y_1 - y_2x_1)}{(y_2 - y_1)} t=(y2y1)(x2y1y2x1)

1 = ∣ S ∣ = ∣ t × ( y 2 − y 1 ) 2 ∣ = ∣ − ( x 2 y 1 − y 2 x 1 ) 2 ∣ 1 = |S| = |\dfrac{t \times (y_2 - y_1)}{2}| = |\dfrac{-(x_2y_1 - y_2x_1)}{2}| 1=S=2t×(y2y1)=2(x2y1y2x1)

因此 ∣ x 2 y 1 − y 2 x 1 ∣ = 2 |x_2y_1 - y_2x_1| = 2 x2y1y2x1=2,即 ∣ A Y − B X ∣ = 2 |AY - BX| = 2 AYBX=2,不妨令 A Y − B X = 2 AY - BX = 2 AYBX=2,考虑 X , Y X,Y X,Y 已经给出,用 exgcd 解决即可。
在这里插入图片描述

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y;
int exgcd(int a,int b) {if(!b) {x = 1;y = 0;return a; }int d = exgcd(b,a % b);int t = x;x = y;y = t - (a / b) * y;return d;
}
signed main() {int a,b,c = 2;scanf("%lld %lld",&a,&b);swap(a,b);b = -b;int d = exgcd(a,b);if(c % d) {printf("-1\n");return 0;} x *= c / d,y *= c / d;printf("%lld %lld\n",x,y);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397013.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DC-3靶机打靶练习!!!!

先开始还是老样子我的思路&#xff1a; 外网渗透 信息收集 我们在发现了靶机的ip以及靶机开放了80端口&#xff0c;然后收集到了cms 然后去访问页面发现了是有登录口的&#xff0c;win10虚拟机进行后台目录扫描&#xff0c;主机进行弱口令爆破&#xff0c;kali在使用msf模块进…

Basic‘ attribute type should not be a container解决方法

在使用Spring Data JPA的时候&#xff0c;实体类中定义一个用List修饰的成员ip&#xff0c;IDEA会提示Basic‘ attribute type should not be a container错误&#xff0c;导致编译不通过。 查阅一些博客和文档说是Spring Data JPA这个框架会把实体类的属性当做是MySQL数据库中…

sql实战

这里写自定义目录标题 sql实战cmseasy daiqile全局污染 RCE限制16字符传入参数限制传入字符7个限制35字符&#xff0c;并过滤所有英文数字 sql实战 cmseasy 1、/lib/admin/admin.php和/lib/admin/tool/front_class.php源代码中发现&#xff0c;可以伪造IP并且传入ishtml1&…

操作符详解(内含二进制与原、反、补码知识点)--还有超详细图解!一看就会!

前言 今天给大家分享一下C语言操作符的详解&#xff0c;但在此之前先铺垫一下二进制和进制转换与原码、反码、补码的知识点&#xff0c;都有详细的图解&#xff0c;也希望这篇文章能对大家有所帮助&#xff0c;大家多多支持呀&#xff01; 目录 前言 一、二进制和进制转换 1…

虚拟dom-Diff算法

虚拟dom-Diff算法 vue2 diff算法在vue2中就是patch&#xff0c;通过新旧虚拟dom对比&#xff0c;找到最小变化然后进行dom操作 在页面首次渲染的时候会调用一次patch并创建新的vnode&#xff0c;不会进行深层次的比较&#xff0c;然后再组件中数据发生变化的时候&#xff0c;…

QT事件。

目录 事件 鼠标事件 mousePressEvnet mouseMoveEvent 事件过滤 定时器事件 事件 事件分配机制&#xff1a;当某个事件(鼠标、键盘)发生的时候&#xff0c;窗口就会收到这个事件&#xff0c;并且调用相应的事件处理函数&#xff0c;事件处理函数的命名都是以Event结尾的&…

总线学习6--I2C(EEPROM)

鉴于I2C的项目还是很多&#xff0c;所以又多做了一个试验。 1 环境说明 主控还是树莓派Pico。eeprom用的是之前买的AT24C02。 软件环境还是老朋友micropython。 接线是这样接的。 24C02 PinPico PinVCC3.3VGNDGNDSDAGP16SCLGP17 2 代码 代码如下&#xff1a; from machine …

[Python学习日记-5] Python中的注释

[Python学习日记-5] Python中的注释 简介 注释的示例和使用说明 代码注释原则 简介 随着学习的深入。用不了多久&#xff0c;你就可以写上千甚至上万行的复杂代码啦&#xff0c;有些代码你花了很久写出来&#xff0c;但过了些天再回去看&#xff0c;发现竟然看不懂了&#x…

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件&#xff0c;不仅如此&#xff0c;还有设定其他应用打开相应的文件&#xff0c;比如chrome打开html。插件食用方法也比较简单&#xff0c;安装后&#…

Linux 软件编程学习第十一天

1.管道&#xff1a; 进程间通信最简单的形式 2.信号&#xff1a; 内核层和用户层通信的一种方式 1.信号类型&#xff1a; 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 1…

gitea docker 快捷安装部署

前言 在前一篇博文&#xff08;什么是 Gitea&#xff1f;&#xff09;中&#xff0c;我们详细介绍了gitea的功能特性&#xff0c;以及其与其它git服务器之间的特性多维度对比。 在本文中&#xff0c;我们将详细介绍gitea的快捷安装部署&#xff0c;docker方式&#xff01; 1…

Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例

文章目录 4、查看或管理磁盘分区-fdisk格式选项示例 4、示例&#xff1a;使用 fdisk 命令创建分区需求操作步骤 5、创建文件系统-mkfs格式常用选项示例创建其他类型的文件系统 6、创建文件系统-mkswap格式常用选项示例拓展&#xff1a;关闭和启用交换分区拓展&#xff1a;swap分…

Visual Studio Code搭建VUE开发环境

Vue.js 是一款易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的 Web 前端框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;提供容易上手的 API 和一流的文档。可以用来开启PC网页、移动端网页页面、小程序等等 实验环境 VS Code 1.88.1Node 20.16.0Vue3.2…

趋动科技联合超聚变,让超融合彻底释放算力潜能

近日&#xff0c;趋动科技联合超聚变推出基于FusionOne HCI超融合的AI算力资源池化解决方案。该方案基于业内领先的AI算力资源池化技术&#xff0c;实现智能调度、异构算力融合管理等功能&#xff0c;让客户能够低成本获取AI算力&#xff0c;便捷使用AI算力&#xff0c;加速AI业…

AI学习记录 - transformer的Embedding层

创作不易&#xff0c;免费的赞 前面有介绍了GPT2如何进行token化的过程&#xff0c;现在讲下transformer的Embedding层 Embedding层就是一个巨大的矩阵&#xff0c;边长分别是词汇表长度和词向量维度&#xff0c;矩阵里面的每一个数字都是一个随机初始化的&#xff0c;或者是…

TinyWebserver的复现与改进(1):服务器环境的搭建与测试

计划开一个新坑, 主要是复现qinguoyi/TinyWebServer项目&#xff0c;并且使用其它模块提升性能。 本文开发服务器配置&#xff1a;腾讯云轻量级服务器&#xff0c;CPU - 2核 内存 - 2GB&#xff0c;操作系统 Ubuntu Server 18.04.1 LTS 64bit 打开端口 需要打开服务器3306、80…

常见硬件工程师面试题(四)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

DriftingBlues2靶机渗透测试

DriftingBlues2靶机 文章目录 DriftingBlues2靶机信息收集FTP渗透web渗透权限提升靶机总结 信息收集 nmap扫描得到21,22和80端口&#xff0c;其中21ftp协议可以使用匿名用户登录 使用目录扫描一下网站&#xff0c;得到了blog目录 FTP渗透 匿名用户登录进去&#xff0c;发现…

WPF篇(8)- Button按钮

1. 用法解析 Button因为继承了ButtonBase&#xff0c;而ButtonBase又继承了ContentControl&#xff0c;所以&#xff0c;Button可以通过设置Content属性来设置要显示的内容。例如 <Button Content"确定"/>我们使用Button的时机&#xff0c;通常是鼠标点击事件…

补录:day023-回溯法

40.组合II 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 思路:组合题目二&#xff0c;这个题…