Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) ---凉凉

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37868325/article/details/82825986

CF又打崩了,。,,A题上来交错语言可还行,,,然后炸网五分钟。。凉凉,,B题还算顺利,,C题一开始懒得记次数,就凉了半小时,,真是,,,中间都放弃一阵先看D,有才回头做,才做出来的,,就是得记次数,不然像2  10的情况应该是NO,会输出YES。。(最后一位是0的话永远会输出YES、、导致不能分的却因为没记次数输出YES)这场比赛前三个真心不难,,是我傻了,,,,

D题没做出来也是比较郁闷,,,,最后也是推错了一点,,,

http://codeforces.com/contest/1058/problem

D题意:求三角形,面积为n*m/k,且三个顶点的横坐标在[0,n]范围,纵坐标在[0,m]范围,求三个顶点位置,丁点要是整数,不存在输出NO,否则输出YES,然后分别输出三个顶点。

思路:自己画图推推,n*m*2%k==0一定是yes,否则是no是好推的,再就是 ,其中一个定点时0 0也是知道的,然后看这个面积,面积是n*m/k,那么对于三角形面积来说,底*高=n*m*2/k,一定是整数,k>2,那么,k能约掉,就一定与n或m有>1的公因子,反正就是好好看看n*m*2/k,它一定小于n*m,它一定能分成两个整数相乘,且其中一个小于等于n,另一个小于等于m。。。实际上这个题,就是看看k与n,m分别约掉了什么,然后合理合并2.,,,

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
    LL n,m,k;
    cin>>n>>m>>k;
    if(((n*m)<<1)%k)
    {
        puts("NO");
        return 0;
    }
    LL x=__gcd(n<<1,k);
    LL y=k/x;
    puts("YES");
    puts("0 0");
    x=(n<<1)/x;
    y=m/y;
    if(x>n)
    {
        x>>=1;
        y<<=1;
    }
    cout<<"0 "<<y<<endl;
    cout<<x<<" 0"<<endl;
    return 0;


}

猜你喜欢

转载自blog.csdn.net/qq_37868325/article/details/82825986
今日推荐