首页 > 其他分享 >AT_abc340_f [ABC340F] S = 1

AT_abc340_f [ABC340F] S = 1

时间:2024-02-13 23:00:30浏览次数:23  
标签:ABC340F int dfrac exgcd abc340 long ay bx

首先我们知道:顶点为 \((0,0),(x,y),(a,b)\) 的三角形的面积为 \(\dfrac{|ay-bx|}{2}\)。因此,问题转化为:给定整数 \(x,y\),求一个整数对 \((a,b)\) 使得
\(|ay-bx|=2\)。

令 \(d=\gcd(x,y)\):

  • 如果 \(d\ge3\),则答案不存在,因为 \(|ay-bx|\) 始终是 \(d\) 的倍数。
  • 如果 \(d=1,2\),则可以使用扩展欧几里得算法获得解,相当于求解方程 \(|my-nx|=d\)。

将 \((y,-x,m,n)\) 作为 exgcd 的输入,可以得到一对 \((m,n)\) 满足 \(|my-nx|=d\),由此可得 \(a=\dfrac{2m}{d},b=\dfrac{2n}{d}\)。

复杂度 \(O(\log\min(x,y))\)。本题有 spj。

#include<bits/stdc++.h>
#define int long long
using namespace std;

int x,y;

int exgcd(int a,int b,int &x,int &y)
{
	int d=a;
	if(b==0)
	{
		x=1;
		y=0;
	}
	else
	{
		d=exgcd(b,a%b,y,x);
		y-=a/b*x;
	}
	return d;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin>>x>>y;
	int a,b,d=__gcd(abs(x),abs(y));
	if(d>=3)
	{
		cout<<-1;
		return 0;
	}
	exgcd(y,-x,a,b);
	cout<<a*2/d<<' '<<b*2/d;
	return 0;
}

标签:ABC340F,int,dfrac,exgcd,abc340,long,ay,bx
From: https://www.cnblogs.com/Ww-Aster-H2/p/18014906

相关文章

  • 树状数组模拟_ABC340_E - Mancala 2
    目录问题简述思路分析参考代码做题反思问题简述原题参考:E-Mancala2初始给出长度为n、m的数组a、b,要求给出m次操作后的数组a,每一次的操作流程如下:设定变量c=0;取出a[b[i]]中的数字保证手上有一个球的情况下进行以下操作:c++向a[(b[i]+c)%n]中放1可以看原题,原题有......
  • 三角形向量公式_ABC340_F - S = 1
    目录题目概述思路分析参考代码做题反思题目概述原题参考F-S=1给出坐标(A,B),问是否存在坐标(X,Y),使得这两个点和原点围起来的三角形的面积是1,如果存在,输出一组解,否则输出-1思路分析结论+板子,没什么好分析的,想到了就好写,利用向量的叉乘求解三角形的面积,因为给出的点中有一个原......
  • Atcoder ABC340(A-D)
    A题题意:给出一个首项为A,尾项为B,公差为D的算数序列,要求输出符合条件的序列思路:只需要从首项开始每次加上公差输出即可代码:#include<bits/stdc++.h>#defineiosios::sync_with_stdio(false);cin.tie(0);cout.tie(0)usingnamespacestd;intadd(intx,inty){returnx......
  • ABC340G Leaf Color
    题意给定一棵树\(T\),包含\(n\)个节点,每个节点有颜色。求有多少个\(T\)的导出子图\(T'\),满足\(T'\)中的叶子节点颜色相同。答案对\(998244353\)取模。\(n\le2\times10^5\)。分析由于叶子节点的限制极其特殊,考虑从叶子的角度思考问题。如果知道了叶子节点的集合,那......
  • ABC340 E&F
    E每次操作的本质:将\(b_i\)盒子的球数置为\(0\),设取出球数为\(c\)。若\(n-b_i\gec\),则给区间\([b_i+1,b_i+c]\)球数加1。否则,先给\([b_i+1,n]\)加1,再全局加\(\frac{c-n+b_i}{n}\),设最终剩下的球数为\(c'(c'<n)\),给\([1,c']\)球数加1。使用任何可以维护区间......
  • ABC340
    Alink模拟。Blink模拟指针。Clink记忆化搜索。时间复杂度证明可以从一个奇数分多遍以后只会有两种数这一角度入手。Dlink由于每次只能选择一种,于是可以将选择变成连边,进行最短路。Elink线段树入门。取余操作本身就是一个环。注意题目中的操作是从\(0\simn-1\)。......
  • ABC340
    \(\huge{C}\)link首先,考虑暴力,用一个堆,存所有数,每次拿出最大的数,拆开加入堆,计入答案,直到最大的\(\le1\),时间复杂度\(O(\text{不能过})\)。考虑想求出\(n\),要什么。求\(n\)一定是第一次把\(n\)拆成\(\lfloor{\frac{n}{2}}\rfloor\)和\(\lceil{\frac{n}{2}}\rceil\),答案加上\(n......
  • ABC340
    T1:ArithmeticProgression模拟代码实现a,b,d=map(int,input().split())foriinrange(a,b+1,d):print(i,end='')T2:Append模拟代码实现q=int(input())a=[]forqiinrange(q):type,x=map(int,input().split())iftype==1:......
  • AtCoder-abc340_f题解
    题意简述给定整数\(x,y\),询问是否存在整数\(a,b\),满足:\(-10^{18}\lea,b\le10^{18}\)。由\((0,0),(x,y),(a,b)\)三点构成的三角形面积为\(1\)。如果存在,输出任意一组;否则输出-1。思路先假设\(x,y,a,b\)都是正数。那么图大概是这样:此时红色三角形的面积就......
  • ABC340
    E我们可以知道每一个点在每一轮加多少,具体如下:假如现在操作的点的为\(k\)。那么所有的数都至少会加\(\dfrac{A_k}{n}\)。但是肯定有剩的,剩了\(A_k\modn\)。很明显,\(A_k\modn\)会分给接下来的\(A_k\modn\)个数。这样我们就可以知道每个点每轮加多少了。然后用线段......