栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C 三线共点===bug?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C 三线共点===bug?

时间限制:2888ms   内存限制:65536kb

通过率:590/785 (75.16%)    正确率:590/7070 (8.35%)

题目背景

Sheep在为自己制作测试数据时发现了自己能AC的代码但在运行自己做的测试数据时直接将编译器卡崩掉了,经过反复的寻找,发现导致最终运行不出来结果的数据在中间过程中的求交时发现了能在计算机的浮点数精度上也能三线共点的情况,于是Sheep就换用了另一种不会产生浮点数误差的方法求交,请你也来试试这种方法吧

题目描述

在xOyxOy上有三条无限长直线,方程的基本形式如下:

A1x+B1y+C1=0A2x+B2y+C2=0A3x+B3y+C3=0A1x+B1y+C1=0A2x+B2y+C2=0A3x+B3y+C3=0

你的任务是判断这三条直线是否会经过同一个点

输入

第一行,一个正整数n(1≤n≤106)n(1≤n≤106)表示数据组数

接下来一共3n3n行,对于第ii组数据(1≤i≤n)(1≤i≤n)

第3i−13i−1行,3个整数,表示A1 A1 ,B1 B1 ,C1C1

第3i3i行,3个整数,表示A2 A2 ,B2 B2 ,C2C2

第3i+13i+1行,3个整数,表示A3 A3 ,B3 B3 ,C3C3

输出

对每组数据

如果出现了3线共点的情况,输出一行一个字符串 Could be a bug!

对于一般情况,输出一行一个字符串 A nice test data ~

输入样例
2
1 -1 1
2 -1 -1
3 -1 -3
-194 611 520
-483 -425 -74
561 -756 -201
输出样例
Could be a bug!
A nice test data ~
Hint

对每个测试点 均有(1≤n≤106)(1≤n≤106)

对所有测试数据均有 −600≤Am,Bm,Cm≤600,1≤m≤3−600≤Am,Bm,Cm≤600,1≤m≤3且Am,Bm,1≤m≤3Am,Bm,1≤m≤3不同时为0

要注意可能产生的浮点数误差范围,避免机器产生过大的浮点数误差

或者选用不会浮点数误差的方法

测试点中可能会出现直线重合的情况,而三线重合时我们也认为发生了三线共点的状况

AUTHOR: Oh So many sheep

#include 
#include 
#include
int main()
{
	int n, i, A1, A2, A3, B1, B2, B3, C1, C2, C3;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		scanf("%d%d%d%d%d%d%d%d%d", &A1, &B1, &C1, &A2, &B2, &C2, &A3, &B3, &C3);
		if (A1*B2 == A2*B1 && A1*B3 == A3*B1)//三条线斜率都相等
		{
			if ((A1*C2 == A2*C1 && B1*C2 == B2*C1) && (A1*C3 == A3*C1 && B1*C3 == B3*C1))//三条线重合,则共点
				printf("Could be a bug!n");
			else//三条线不都重合,则不共点
				printf("A nice test data ~n");
		}
		else if (A1*B2 == A2*B1)//12 斜率相等,不与3相等
		{
			if ((A1*C2 == A2*C1) && (B1*C2 == B2*C1))//12重合
				printf("Could be a bug!n");
			else
				printf("A nice test data ~n");
		}
		else if (A1*B3 == A3*B1)
		{
			if ((A1*C3 == A3*C1) && (B1*C3 == B3*C1))
				printf("Could be a bug!n");
			else
				printf("A nice test data ~n");
		}
		else if (A2*B3 == A3*B2)
		{
			if ((A2*C3 == A3*C2) && (B2*C3 == B3*C2))
				printf("Could be a bug!n");
			else
				printf("A nice test data ~n");
		}
		else
		{
			if (A1*(B2*C3 - B3*C2) - B1*(A2*C3 - A3 * C2) + C1*(A2 * B3 - A3 * B2) == 0)
				printf("Could be a bug!n");
			else
				printf("A nice test data ~n");
		}
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号