Gym
来源:互联网 发布:mysql官方下载教程 编辑:程序博客网 时间:2024/06/09 15:34
题目链接:https://vjudge.net/problem/Gym-101490G
题意:有n个传感器,每个传感器有三个参数(x,y,d),x,y表示传感器的位置,现在让你建一个观测站,这个观测站需要能检测到所有的传感器,如果传感器能被监测站检测到到的话,一定会满足,传感器到检测站的曼哈顿距离等于d,如果只存在一个满足条件的监测站,就直接输出坐标,如果不存在就输出不确定,如果不存在输出impossible
解析:对于每个传感器来说,满足建站位置只能是一个菱形上的整点,那其实是考虑n个菱形是否能交出一点,理论可行,但是很难写。整个二维平面的大小是1e6*1e6,那么我们不妨考虑枚举一个点的传感器所满足的检测站位置,然后去判断是否满足其他监测站,然后这要搞一下,感觉这个在每个传感器规模很大的时候,这个二维平面限制了他,所以及时break,应该不会超时,第一次忘了写break,结果A了,看来数据有点水
#include <bits/stdc++.h>using namespace std;const int maxn = 1005;struct point{ int x,y,d;}a[maxn];int n,ax,ay;bool judge(int x,int y){ for(int i=1;i<n;i++) { if(abs(a[i].x-x)+abs(a[i].y-y)!=a[i].d) return false; } ax = x,ay = y; return true;}int main(void){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].d); int ans = 0; if(n==1) { if(a[0].d) puts("uncertain"); else printf("%d %d\n",a[0].x,a[0].y); } else { for(int i=0;i<=a[0].d;i++) { int dy = a[0].d-i; if(judge(a[0].x+i,a[0].y+dy)) ans++; if(i&&dy&&judge(a[0].x-i,a[0].y-dy)) ans++; if(i&&judge(a[0].x-i,a[0].y+dy)) ans++; if(dy&&judge(a[0].x+i,a[0].y-dy)) ans++; if(ans>1) break; } if(ans) { if(ans==1) printf("%d %d\n",ax,ay); else puts("uncertain"); } else puts("impossible"); } return 0;}
阅读全文
0 0
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Java遍历树(深度优先+广度优先)
- find,locate,whereis,which,重定向
- Android连接MySQL数据库并进行增删改查操作
- 九度 题目1028:继续畅通工程
- cookie和session
- Gym
- eclipse_代码块缩进
- 运行ggplot出现问题:no display name and no $DISPLAY environment variable
- 经典行转列例子
- sys文件系统中文件、文件夹与kobject、kset、kobj_type的对应关系
- IR2110栅极驱动密勒效应解决电路
- 51nod 1434 区间LCM
- Crond详解
- 设计模式