牛客网挑战赛21 A灯塔

2024-02-21 01:50
文章标签 21 牛客 挑战赛 灯塔

本文主要是介绍牛客网挑战赛21 A灯塔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接:https://www.nowcoder.com/acm/contest/159/A
来源:牛客网
 

Z市是一座港口城市,来来往往的船只依靠灯塔指引方向。
在海平面上,存在n个灯塔。每个灯塔可以照亮以它的中心点为中心的90°范围。特別地, 由于特殊限制,每个灯塔照亮范围的角的两条边必须要么与坐标轴平行要么与坐标轴成45°。 由于经费限制,Z市的灯塔只能被点亮一座。你需要求出在这种情况下,是否存在一座灯塔能够照亮Z市的所有灯塔。

输入描述:

第一行一个整数T,表示数据组数。
对于每组数据,第一行一个整数n,表示灯塔的数量。
接下来n行,每行两个整数xi,yi,表示第i座灯塔的坐标点。

输出描述:

如果存在一座灯塔能够照亮Z市的所有灯塔则输出Yes,否则输出No(区分大小写)。

示例1

输入

复制

2
4
1 1
1 2
2 1
2 2
5
4 7
0 4
7 3
3 0
3 4

输出

复制

Yes
No

这个题是一个思维题,想到方法就好做了。

我的方法是通过边来找点,这样就会有八个点,完了遍历一边就好了。有个关键点就是要读懂那个角度,

完了给大家看一下代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>using namespace std;
typedef long long ll;
const ll maxn=1e6+10;
struct node{int x,y;
};
node a[maxn];
node b[maxn];
node c[maxn];
node d[maxn];
int t;
int n;
bool cmp(node p,node q){return p.x>q.x;
}
bool cmp1(node p,node q){return p.y>q.y;
}
bool cmp2(node p,node q){return p.y-p.x>q.y-q.x;
}
bool cmp3(node p,node q){return p.x+p.y>q.y+q.x;
}
int main()
{ios::sync_with_stdio(false);cin>>t;while(t--){cin>>n;for(int i=0;i<n;i++){cin>>a[i].x>>a[i].y;b[i].x = a[i].x;b[i].y = a[i].y;c[i].x = a[i].x;c[i].y = a[i].y;d[i].x = a[i].x;d[i].y = a[i].y;}sort(a,a+n,cmp);sort(b,b+n,cmp1);sort(c,c+n,cmp2);sort(d,d+n,cmp3);int flag =0;//	cout<<d[0].x<<"---"<<d[0].y<<endl;//	cout<<d[n-1].x<<"..."<<d[n-1].y<<endl;//	cout<<c[0].x<<",,,"<<c[0].y<<endl;//	cout<<c[n-1].x<<"+++"<<c[n-1].y<<endl;int t1 = d[0].x+d[0].y;int t2 = c[0].y-c[0].x;int t3 = d[n-1].x+d[n-1].y;int t4 = c[n-1].y-c[n-1].x;double y1 = double(t1+t2)/2;double x1 = double(t1-t2)/2;double y2 = double(t1+t4)/2;double x2 = double(t1-t4)/2;double y3 = double(t3+t2)/2;double x3 = double(t3-t2)/2;double y4 = double(t3+t4)/2;double x4 = double(t3-t4)/2;//	cout<<x1<<"---"<<y1<<endl;//	cout<<x2<<"----"<<y2<<endl;//	cout<<x3<<"-----"<<y3<<endl;//	cout<<x4<<"------"<<y4<<endl;//cout<<a[0].x<<"---"<<b[0].y<<endl;//cout<<a[0].x<<"----"<<b[n-1].y<<endl;//cout<<a[n-1].x<<"-----"<<b[0].y<<endl;//cout<<a[n-1].x<<"------"<<b[n-1].y<<endl;for(int i=0;i<n;i++){if( (a[i].x==a[0].x&&a[i].y==b[0].y) || (a[i].x==a[0].x&&a[i].y == b[n-1].y) || (a[i].x==a[n-1].x&&a[i].y==b[0].y) || (a[i].x==a[n-1].x&&a[i].y==b[n-1].y) || (a[i].x==x1&&a[i].y==y1) || (a[i].x==x2&&a[i].y ==y2) || (a[i].x==x3&&a[i].y==y3) || (a[i].x==x4&&a[i].y==y4)){cout<<"Yes"<<endl;flag = 1;break;}}if(flag==0)cout<<"No"<<endl;}return 0;
}

好好学习,记录美好生活

这篇关于牛客网挑战赛21 A灯塔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730226

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

react笔记 8-21 约束性 表单

1、约束性组件和非约束性组件 非约束性组件<input type="text" name="" defaultValue={this.state.msg}></input>这里他的value是用户输入的值 并没有执行操作 只是获取到了msg的值 用户输入不会改变数据非约束性组件需要使用defaultValue获取数据 否则会报错约束性组件<input type="text

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f