NC200579. Line
描述
输入描述
第一行是一个整数,表示样例的个数。
以后每行是一个样例,为6个整数。
输出描述
每行输出一个直线的方程参数a,b,c,要求a,b,c为整数,a>0或a=0,b>0且a,b,c的最大公约数为1。
示例1
输入:
1 0 0 2 1 1 2
输出:
1 0 -1
C++14(g++5.4) 解法, 执行用时: 43ms, 内存消耗: 864K, 提交时间: 2020-02-26 19:48:20
#include<bits/stdc++.h> using namespace std; int main() { long long x1,_y1,x2,y2,x3,y3; int T; cin>>T; while(T--) { long long a,b,c; cin>>x1>>_y1>>x2>>y2>>x3>>y3; a=(_y1+y2)-2*y3; b=-(x1+x2)+2*x3; c=((x1+x2)-2*x3)*y3-((_y1+y2)-2*y3)*x3; long long temp=__gcd(a,__gcd(b,c)); a=a/temp;b=b/temp;c=c/temp; if(a<0) a=-a,b=-b,c=-c; else if(a==0&&b<0) b=-b,c=-c; cout<<a<<" "<<b<<" "<<c<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 38ms, 内存消耗: 908K, 提交时间: 2020-07-31 15:54:55
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll x1,x2,x3,yy1,y2,y3,t; int main() { cin>>t; while(t--) { cin>>x1>>yy1>>x2>>y2>>x3>>y3; ll a = (yy1+y2)-2*y3; ll b = -(x1+x2)+2*x3; ll c = ((x1+x2)-2*x3)*y3-((yy1+y2)-2*y3)*x3; ll g = __gcd(__gcd(a,b),c); a = a/g,b = b/g,c = c/g; if(a<0) a=-a,b=-b,c=-c; else if(a==0 && b<0) b=-b,c=-c; cout<<a<<" "<<b<<" "<<c<<endl; } }