列表

详情


NC200579. Line

描述

已知平面上一个矩形R(x_1,y_1,x_2,y_2),其中(x_1,y_1)是矩形左下角坐标,(x_2,y_2)是矩形右上角坐标,和矩形外一个点P(x_3,y_3),求通过点P的一条直线ax+by+c=0,使得矩形R被分成面积相等的两部分。

输入描述

第一行是一个整数,表示样例的个数。
以后每行是一个样例,为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;
	}
}

上一题