站外题求助,能帮小蒟蒻看一下吗?
  • 板块学术版
  • 楼主潜水的蒟蒻
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/8/3 15:57
  • 上次更新2023/11/6 21:24:35
查看原帖
站外题求助,能帮小蒟蒻看一下吗?
119643
潜水的蒟蒻楼主2020/8/3 15:57
灯塔

时间限制: 1000 ms         内存限制: 131072 KB

【题目描述】
大洋上共有 N 个岛屿,从 1 到 N 标号。与广袤的大海相比,我们可以认为每个岛都只是平面上的一个点。给定所有岛屿的笛卡尔坐标,坐标系 X 轴指向东,Y 轴指向北。

你需要照亮所有的岛屿。为此,你可以在某些岛屿上修建灯塔。每个岛屿至多只能建一座灯塔。每个灯塔可以照亮以它为原点的坐标系的一个象限,即东北、西北、西南、东南的其中之一。注意如果一个岛屿落在光照的边缘,也被认为被照亮了,这意味着修建灯塔的岛屿总是被照亮的。

请你找出一个照亮所有岛屿所需灯塔数(记为 L)最小的方案。

【输入】
输入数据第一行包含一个整数 T,表示数据组数。

接下来是 T 组数据。 每组数据第一行包含一个整数 N,表示岛屿数量。

接下来的 N 行,每行包含两个整数 Xi 和 Yi,表示各岛屿的坐标。

【输出】
对于每组数据,输出一行包含需要的灯塔数量 L。

【输入样例】   
1   
4  
5 0  
-5 0  
0 5  
0 -5  
【输出样例】  
2  
【提示】  
【数据规模】  

对于20%的数据,1≤N,T≤10;

对于100%的数据,1≤T≤1000,1≤N≤10^5,0≤|Xi|,|Yi|≤10^9,∑N≤5×10^5。

题目如上,请问有没有原题/非常类似的题,内部OJ上改了半天都被卡第二个测试点,就是不知道错哪(看不到测试数据).教练说这道题就是找一下四个方向的极点,如果有一个极点是在左上/右上/左下/右下,就输出1,否则输出2.可是小蒟蒻就改不对,代码如下:

#pragma GCC optimize(3,"Ofast","inline")//日常优化
#include<bits/stdc++.h>//标准头文件
using namespace std;//必要格式
int main()//烤main包
{
 	ios::sync_with_stdio(false);//加快速度
 	long long t;cin>>t;//一共t组数据 
 	for(long long i=1;i<=t;i++)//每一组数据中 
 	{
 		long long k;cin>>k;//一共k个点 
 		long long n,s,w,e,nk=-99999999,sk=99999999,wk=9999999999,ek=-999999999;//记录最上,最下,最左,最右的点,及各自极点坐标 
 		for(long long j=1;j<=k;j++)//输入每个点的坐标 
 		{
 			long long x,y;cin>>x>>y;//输入坐标 
 			if(y>nk)//如果这个点比已知最上点更上 
 			{
 				n=j;//记录上极点 
 				nk=y;//更新上极点坐标 
 			}
 			if(y<sk)//如果这个点比已知最下点更下 
 			{
 				s=j;//记录下极点 
 				sk=y;//更新下极点坐标 
 			}
 			if(x<wk)//如果这个点比已知最左点更左 
 			{
 				w=j;//记录左极点 
 				wk=x;//更新左极点坐标 
 			}
 			if(x>ek)//如果这个点比已知最右点更右 
 			{
 				e=j;//记录右极点 
 				ek=x;//更新右极点坐标 
 			}
 		}
 		if(n==w/*左上*/||n==e/*右上*/||s==w/*左下*/||s==e/*右下*/||k<=3)cout<<"1"<<endl;//如果有两个极点是相同的,就只需要一个极点就可以照完 
 		else cout<<"2"<<endl;//否则要两个 
 	}
	return 0;//祈祷AC
}

大佬能看一下吗,蟹蟹
大佬如果想测小蒟蒻可以帮忙提交一下看是否正确

2020/8/3 15:57
加载中...