Codeforces Round #512 (Div. 2) D. Vasya and Triangle
Posted mltang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #512 (Div. 2) D. Vasya and Triangle相关的知识,希望对你有一定的参考价值。
参考了别人的思路:https://blog.csdn.net/qq_41608020/article/details/82827632
http://www.cnblogs.com/qywhy/p/9695344.html
首先根据皮克定理,2*m*n/k一定要是一个整数,也就是说2*m*n%k !=0 的都可以不用算了
最简单的构造方法肯定是 (a,0),(0,b)
2*n*m%k ==0,把2*n*m看成2*n和m两部分,k中的质因子,一部分在2*n中,一部分在m中,当然这个“一部分”可以是0
例子:2*3*5%15 == 0 k的质因子分别来自n和m
当k和2*n含有相同的质因子时
令t=gcd(2*n,k) t一定大于等于2
令a = 2n/t a一定小于n
b = (2*m*n)/(a*k)
b=m*t/k b一定小于等于m(因为t一定大于等于k)
当k和2*n不含相同质因子时
那么质因子就全部包含在m里面
直接令a = n b = 2*m/k 即可 因为k >= 2 所以不会超范围
ac:代码
#include<bits/stdc++.h> using namespace std; #define ll long long long long n,m,k; ll gcd(ll a,ll b) { if (b==0) return a; return gcd(b,a%b); } int main() { scanf("%lld%lld%lld",&n,&m,&k); if (n*m*2%k!=0) { printf("NO"); return 0; } printf("YES 0 0 "); long long g = gcd(2*n,k); if(g == 1) { ll a = n; ll b = 2*m/k; printf("%lld 0 ",a); printf("0 %lld ",b); } else { ll a = 2*n/g; ll b = m*g/k; printf("%lld 0 ",a); printf("0 %lld ",b); } }
以上是关于Codeforces Round #512 (Div. 2) D. Vasya and Triangle的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Tick
Codeforces Round #512 (Div. 2) D. Vasya and Triangle
Codeforces Round #512 E - Vasya and Good Sequences
Codeforces Round #512 (Div. 2) D.Vasya and Triangle 数学