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;
}