牛客网 Wannafly挑战赛21 灯塔
Z市是一座港口城市,来来往往的船只依靠灯塔指引方向。
在海平面上,存在n个灯塔。每个灯塔可以照亮以它的中心点为中心的90°范围。特別地, 由于特殊限制,每个灯塔照亮范围的角的两条边必须要么与坐标轴平行要么与坐标轴成45°。 由于经费限制,Z市的灯塔只能被点亮一座。你需要求出在这种情况下,是否存在一座灯塔能够照亮Z市的所有灯塔。
在海平面上,存在n个灯塔。每个灯塔可以照亮以它的中心点为中心的90°范围。特別地, 由于特殊限制,每个灯塔照亮范围的角的两条边必须要么与坐标轴平行要么与坐标轴成45°。 由于经费限制,Z市的灯塔只能被点亮一座。你需要求出在这种情况下,是否存在一座灯塔能够照亮Z市的所有灯塔。
输入描述:
第一行一个整数T,表示数据组数。
对于每组数据,第一行一个整数n,表示灯塔的数量。
接下来n行,每行两个整数xi,yi,表示第i座灯塔的坐标点。
输出描述:
如果存在一座灯塔能够照亮Z市的所有灯塔则输出Yes,否则输出No(区分大小写)。
备注:
n≤1000000,T≤10,0≤|xi|,|yi|≤109
#include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> #include <cstring> using namespace std; #define ll long long #define N 1000009 #define gep(i,a,b) for(int i=a;i<=b;i++) #define mem(a,b) memset(a,b,sizeof(a)) int t,n; struct Node{ int x,y; }nod[N],p[4]; bool cmp1(Node a,Node b) { return a.x<b.x; } bool cmp2(Node a,Node b){ return a.y<b.y; } int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); gep(i,0,n-1){ scanf("%d%d",&nod[i].x,&nod[i].y); } sort(nod,nod+n,cmp1); p[0]=nod[0];p[1]=nod[n-1]; sort(nod,nod+n,cmp2); p[2]=nod[0];p[3]=nod[n-1]; if(p[0].y==p[2].y||p[0].y==p[3].y||p[1].y==p[2].y||p[1].y==p[3].y){ printf("Yes\n"); continue; } bool judge[4]={1,1,1,1}; gep(i,0,n-1){ if(abs(nod[i].y-p[0].y)>abs(nod[i].x-p[0].x)) judge[0]=0; if(abs(nod[i].y-p[1].y)>abs(nod[i].x-p[1].x)) judge[1]=0; if(abs(nod[i].y-p[2].y)<abs(nod[i].x-p[2].x)) judge[2]=0; if(abs(nod[i].y-p[3].y)<abs(nod[i].x-p[3].x)) judge[3]=0; } if(judge[0]+judge[1]+judge[2]+judge[3]) printf("Yes\n"); else printf("No\n"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现