首页 > 试题广场 >

交叉线

[编程题]交叉线
  • 热度指数:5212 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
M布置给小M一个题目:首先给出n个在横坐标上的点,然后连续的用半圆连接他们:首先连接第一个点与第二点(以第一个点和第二点作为半圆的直径)。然后连接第二个第三个点,直到第n个点。现在需要判定这些半圆是否相交了,在端点处相交不算半圆相交。如下图所示。


输入描述:
输入的第一行包含一个整数T (1 ≤ T ≤ 10)表示有T组样例。

每组样例的第一行是一个整数n (1≤n≤1000)。

接下来的一行输入有n个用空格隔开的不同的整数a1,a2,...,an (-1000000 ≤ ai ≤ 1000000),(ai,0)表示第i个点在横坐标的位置。


输出描述:
对于每个输入文件,输出T行。

每行输出"y"表示这些半圆有相交或者"n"。
示例1

输入

2
4
0 10 5 15
4
0 15 5 10

输出

y
n
头像 牛客题解官
发表于 2020-06-05 18:59:39
题解: 考察点: 思维,数形结合,暴力 易错点: 本题中要求的是相交的半圆,如果存在两个半圆,直径分别为和,并且满足,则不属于相交的情况,所以如果按照结束位置排序的方法来贪心并不可行 一定注意题目中明确说明在端点处相交不算相交 解法: 这题通过数形结合的方法更容易理解,设两个半圆的端点分别为和,则相 展开全文
头像 牛客660479076号
发表于 2022-04-27 10:09:26
java版本:用List<int[]>集合储存圆,遍历集合,所有圆都不存在相交,返回fasle,只要有两个圆相交,返回true import java.util.*; public class Main{ public static void main(String[] args 展开全文
头像 有害诗篇
发表于 2024-03-05 14:59:48
#include <bits/stdc++.h> using namespace std; int main() { int T = 0; cin >> T; while(T--){ int n = 0; cin &g 展开全文
头像 面试摇了我吧
发表于 2024-07-22 13:56:59
#include <bits/stdc++.h> #include <sys/types.h> using namespace std; typedef pair<long long int, long long int> line; #define x fir 展开全文
头像 牛客216353250号
发表于 2023-09-15 14:13:05
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () = 展开全文
头像 c风x
发表于 2022-07-07 09:50:38
代码实现: import java.util.*; public class Main{     public static void main(String[] args)  展开全文
头像 1binbin
发表于 2023-07-28 14:20:43
思路:将所有圆的左右端点存入集中,然后两两去判断是否相交,只要有相交的就返回“y” import java.util.ArrayList; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package 展开全文
头像 贪吃的迪恩顶呱呱
发表于 2024-04-29 12:29:57
不用排序,直接拿每个圆全部判断一次,找到就跳出即可。判断圆是否相交,其实不用想的太复杂,只需要两个圆的坐标两两对比即可:用pair数对的first和second分别表示圆的左右端点,那么用甲圆的first、second分别与乙圆的first、second交叉对比,就有三个条件联立判断:甲的first 展开全文
头像 bug_making()
发表于 2022-05-06 16:36:32
假设两个半圆的坐标分别是 (x1,x2), (y1, y2),其中 x2>x1 && y2>y1,那么两个圆是否相交的条件可以有: y2 > x2 > y1 > x1 x2 > y2 > x1 > y1 这两种情况对应下面的 isI 展开全文