首页 > 其他分享 >三角形向量公式_ABC340_F - S = 1

三角形向量公式_ABC340_F - S = 1

时间:2024-02-13 20:11:06浏览次数:44  
标签:const cout ll long ABC340 三角形 向量 define

目录

题目概述

原题参考F-S=1
给出坐标(A,B),问是否存在坐标(X,Y),使得这两个点和原点围起来的三角形的面积是1,如果存在,输出一组解,否则输出-1

思路分析

结论+板子,没什么好分析的,想到了就好写,利用向量的叉乘求解三角形的面积,因为给出的点中有一个原点,向量就很好表示,之后就是求解BX-AY=2的一组解,利用扩欧求解即可
当gcd(a,b)大于2,也就是不能被2整除时,该方程无整数解,否则存在整数解

参考代码

#include <bits/stdc++.h>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<int>
#define vl vector<long long>
#define ll long long
#define ull unsigned long long
const ll INF = 9187201950435737471;
const int inf = 2139062143;
const ll mod = 1e9 + 7;
const double eps = 1e-6;
const double PI = acos(-1.0);
ll a, b, x, y;
ll exgcd(ll a, ll b, ll &x, ll &y) {
    if(!b) {
        x = 1, y = 0;
        return a;
    }
    int d = exgcd(b, a%b, y, x);
    y -= (a/b) * x;
    return d;
}
void solve() {
    cin >> a >> b;
    ll d = gcd(a, b);
    if(d > 2) cout << -1 << endl;
    else {
        exgcd(b, -a, x, y);
        x *= 2/d, y *= 2/d;
        cout << x << " " << y << endl;
    }
}
int main() {
#ifdef xrl
    freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
#endif
    FAST_IO;
    int t = 1;
    //cin >> t;
    while(t --) solve();
#ifdef xrl
    cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
#endif
    return 0;
}

做题反思

反思自己为什么没想起来这个公式,以及为什么前面做得慢导致这里没多少时间hhhhh

标签:const,cout,ll,long,ABC340,三角形,向量,define
From: https://www.cnblogs.com/notalking569/p/18014790

相关文章

  • 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。使用任何可以维护区间......
  • 洛谷P5725 【深基4.习8】求三角形
    洛谷P5725【深基4.习8】求三角形【深基4.习8】求三角形题目描述模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。输入格式输入矩阵的规模,不超过9。输出格式输出矩形和正方形样例#1样例输入#14样例输出#101020304050607080910111213141516......
  • 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\)个数。这样我们就可以知道每个点每轮加多少了。然后用线段......
  • 打印三角形 (5行)
    需求打印三角形(5行)代码实现packagecom.jichu.struct;publicclassTestDemo{publicstaticvoidmain(String[]args){//打印三角形5行for(inti=1;i<=5;i++){//i行for(intj=5;j>=i;j--){//j一行几个左边第一个......