(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

题意:传送门

题目描述 
Z市是一座港口城市,来来往往的船只依靠灯塔指引方向。 
在海平面上,存在n个灯塔。每个灯塔可以照亮以它的中心点为中心的90°范围。特別地, 由于特殊限制,每个灯塔照亮范围的角的两条边必须要么与坐标轴平行要么与坐标轴成45°。 由于经费限制,Z市的灯塔只能被点亮一座。你需要求出在这种情况下,是否存在一座灯塔能够照亮Z市的所有灯塔。 
输入描述: 
第一行一个整数T,表示数据组数。 
对于每组数据,第一行一个整数n,表示灯塔的数量。 
接下来n行,每行两个整数xi,yi,表示第i座灯塔的坐标点。 
输出描述: 
如果存在一座灯塔能够照亮Z市的所有灯塔则输出Yes,否则输出No(区分大小写)。

思路:

 首先选取最上面最下面最左边最右边的四个点。 
 然后枚举这四个点,算出其他所有点到这一个点的角度,然后排序。 
 排完序之后看这点角度符不符合题目所说的要求。要么全在一个象限内,要么在y=xy=x和y=−xy=−x俩直线之间。

丫的,之前百度了一份凸包模版,然后一直不对,后来删掉凸包部分就过了,恶心 
 然后在日天学长要了一份凸包模版,这tm才是正确的凸包嘛,用了日天的凸包也过了。凸包模版请看这里:传送门

AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MX = 1e6 + ;
const double pi = acos(-1.0);
struct lp {
LL x, y;
} cw[MX],R[MX],op[],ok;
bool cmp1(lp &a, lp &b){
return a.x<b.x;
}
bool cmp2(lp &a, lp &b){
return a.y<b.y;
}
double ans[MX];
int main() {
#ifndef ONLINE_JUDGE
freopen("E://ADpan//in.in", "r", stdin);
//freopen("E://ADpan//out.out", "w", stdout);
#endif
int T, n;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=;i<n;++i){
scanf("%lld%lld",&cw[i].x,&cw[i].y);
}
int flag = ;
sort(cw,cw+n,cmp2);
op[]=cw[],op[]=cw[n-];
sort(cw,cw+n,cmp1);
op[]=cw[],op[]=cw[n-];
double haha = pi/;
for(int t=;t<=;++t){
int tn = ;
ok=op[t];
int res=;
for(int i=;i<n;++i){
if(cw[i].x==ok.x&&cw[i].y==ok.y)continue;
ans[tn++]=atan2(cw[i].y-ok.y*1.0,1.0*cw[i].x-ok.x);
if(ans[tn-]>-pi*/&&ans[tn-]<pi*/)res=;
}
sort(ans,ans+tn);
double mmax=ans[tn-],mmin=ans[];
if(mmax<=-haha)flag=;
if(mmin>=-*pi/&&mmax<=-pi/)flag=;
if(mmin>=-haha&&mmax<=)flag=;
if(mmin>=-pi/&&mmax<=pi/)flag=;
if(mmin>=&&mmax<=haha)flag=;
if(mmin>=pi/&&mmax<=pi*/)flag=;
if(mmin>=haha&&mmax<=pi)flag=;
if(res)flag=;
}
if(flag)printf("Yes\n");
else printf("No\n");
}
return ;
}

最新文章

  1. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习
  2. codeforces B. Ohana Cleans Up
  3. CodeIgniter2.2.0-在控制器里调用load失败报错的问题
  4. php -- 获取当月天数及当月第一天及最后一天、上月第一天及最后一天(备忘)
  5. nuget.exe the application could not be started
  6. ruby简单的基础 5
  7. 【转】linux下 postgres的一些操作总结
  8. WPF遮蔽层的实现
  9. JAVA解决大数
  10. LinkQueue(链队列)
  11. HTML结构
  12. informix服务端口和oralce服务端口
  13. 【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
  14. Lenovo System x3650 设置管理接口地址
  15. css-reset 代码
  16. Unity3D协程yield的理解
  17. hadoop 伪分布式搭建
  18. svn更新出现冲突的解决方法
  19. 【Linux】【Selenium】安装Chrome和ChromeDriver的配置
  20. linux降低内存后oracle数据库无法启动

热门文章

  1. ( vant ) 新手踩坑
  2. Cross platform
  3. 性能超过DRUID的最强数据库连接池——HikariCP相关配置及简单示例
  4. delphi 时间
  5. “今日头条杯”首届湖北省大学程序设计竞赛--F. Flower Road
  6. MFC的回调函数
  7. vs2012+wdk8.0 搭建wdf驱动开发环境
  8. 23、css的定位问题
  9. 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx
  10. HTTP六大请求