set+几何 LA 5908 Tracking RFIDs
题意:给一些传感器,范围在r内,再给一些询问点,问这些点能有几个传感器收到,当有墙隔绝时信号减弱,范围变小
分析:set存储传感器,用set的find来查找是否是传感器。因为询问点少,可以枚举询问点的r的范围的所有整数点,+线段相交新模板:)
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
struct Point {
int x, y;
Point() {}
Point(int x, int y) : x (x), y (y) {}
Point operator - (const Point &r) const {
return Point (x - r.x, y - r.y);
}
bool operator < (const Point &r) const {
return x < r.x || (x == r.x && y < r.y);
}
int operator ^ (const Point &r) const { //叉积
return x * r.y - y * r.x;
}
bool operator == (const Point &r) const {
return (x == r.x && y == r.y);
}
};
typedef Point Vector;
Point read_point(void) {
int x, y; scanf ("%d%d", &x, &y);
return Point (x, y);
}
int dot(Vector A, Vector B) {
return A.x * B.x + A.y * B.y;
}
int cross(Vector A, Vector B) {
return A.x * B.y - A.y * B.x;
}
bool on_seg(Point p, Point a, Point b) {
return (cross (a - p, b - p) == 0 && dot (a - p, b - p) < 0);
}
//2 规范相交 1 非规范相交 0 不相交 //有误
int can_seg_seg_inter(Point a1, Point a2, Point b1, Point b2) {
int c1 = cross (a2 - a1, b1 - a1), c2 = cross (a2 - a1, b2 - a1),
c3 = cross (b2 - b1, a1 - b1), c4 = cross (b2 - b1, a2 - b1);
if ((c1 ^ c2) == -2 && (c3 ^ c4) == -2) return 2;
return (on_seg (a1, b1, b2) || on_seg (a2, b1, b2)
|| on_seg (b1, a1, a2) || on_seg (b2, a1, a2));
}
bool check(Point a1, Point a2, Point b1, Point b2) {
if (min (a1.x, a2.x) > max (b1.x, b2.x) ||
min (a1.y, a2.y) > max (b1.y, b2.y) ||
min (b1.x, b2.x) > max (a1.x, a2.x) ||
min (b1.y, b2.y) > max (a1.y, a2.y)) return false;
int c1 = (a1 - a2) ^ (a1 - b1);
int c2 = (a1 - a2) ^ (a1 - b2);
int c3 = (b1 - b2) ^ (b1 - a1);
int c4 = (b1 - b2) ^ (b1 - a2);
return 1ll * c1 * c2 <= 0 && 1ll * c3 * c4 <= 0;
}
int s, r, w, p;
Point p1[15], p2[15];
set<Point> S; int squ(int x) {
return x * x;
} int get_dis2(Point a, Point b) {
return squ (a.x - b.x) + squ (a.y - b.y);
} bool find_senor(Point a, Point b) {
if (S.find (b) != S.end ()) {
int d2 = get_dis2 (a, b);
if (d2 > squ (r)) return false;
int cnt = 0;
for (int i=1; i<=w; ++i) {
//if (can_seg_seg_inter (a, b, p1[i], p2[i])) cnt++;
if (check (a, b, p1[i], p2[i])) cnt++;
}
if (cnt > r) return false;
return d2 <= squ (r - cnt);
}
else return false;
} void run(Point a, vector<Point> &vec) {
for (int i=-r; i<=r; ++i) {
int d = sqrt (squ (r) - squ (i));
for (int j=-r; j<=r; ++j) {
Point b = Point (a.x + i, a.y + j);
if (find_senor (a, b)) vec.push_back (b);
}
}
} int main(void) {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d%d%d", &s, &r, &w, &p);
S.clear ();
for (int i=1; i<=s; ++i) {
S.insert (read_point ());
}
for (int i=1; i<=w; ++i) {
p1[i] = read_point ();
p2[i] = read_point ();
}
vector<Point> vec;
for (int i=1; i<=p; ++i) {
Point a = read_point ();
vec.clear ();
run (a, vec);
sort (vec.begin (), vec.end ());
printf ("%d", vec.size ());
for (int i=0; i<vec.size (); ++i) {
printf (" (%d,%d)", vec[i].x, vec[i].y);
}
puts ("");
}
} return 0;
}
set+几何 LA 5908 Tracking RFIDs的更多相关文章
- STL之map、set灵活使用
1.LA 5908/UVA1517 Tracking RFIDs 题意:给出s个传感器的位置,以及其感应范围.如果某个方向上有墙,则该方向上感应距离减1.现在有w个墙,给出p个物品的位置,问其能被几个 ...
- 简单几何(半平面交+二分) LA 3890 Most Distant Point from the Sea
题目传送门 题意:凸多边形的小岛在海里,问岛上的点到海最远的距离. 分析:训练指南P279,二分答案,然后整个多边形往内部收缩,如果半平面交非空,那么这些点构成半平面,存在满足的点. /******* ...
- 简单几何(求划分区域) LA 3263 That Nice Euler Circuit
题目传送门 题意:一笔画,问该图形将平面分成多少个区域 分析:训练指南P260,欧拉定理:平面图定点数V,边数E,面数F,则V + F - E = 2.那么找出新增的点和边就可以了.用到了判断线段相 ...
- LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
题目链接 非原创 原创地址:http://blog.csdn.net/jingqi814/article/details/26117241 题意:输入n座山的信息(山的横坐标,高度,山底宽度),计算他 ...
- LA 3263 好看的一笔画 欧拉几何+计算几何模板
题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...
- LA 4676 Geometry Problem (几何)
ACM-ICPC Live Archive 又是搞了一个晚上啊!!! 总算是得到一个教训,误差总是会有的,不过需要用方法排除误差.想这题才几分钟,敲这题才半个钟,debug就用了一个晚上了!TAT 有 ...
- 《 iPhone X ARKit Face Tracking 》
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文来自于腾讯Bugly公众号(weixinBugly), 作者:jennysluo,未经作者同意,请勿转载,原文地址:http://mp.w ...
- 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC (Deep SORT)
网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是tracking by detection 方法进行多目标跟踪的文章,在SORT的基础 ...
- 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)
网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是使用 tracking by detection 方法进行多目标跟踪的文章,是后续de ...
随机推荐
- php数据访问(修改)
修改:跟添加相似,需要显示默认值 先嵌入php代码 查询数据库 $code = $_GET["c"]; $db = new MySQLi("localhost" ...
- 网站上点击自定义按钮发起QQ聊天的解决方案
一.背景 最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家. 二.解决方案 1.首先访问:http://shang.qq.com/widget/consult.php,适 ...
- JSoup笔记
- Vi 的基本使用
一.Vi入门 Unix 提供了全屏幕的Vi编辑器,这使我们的工作轻松不少.不少DOS用户抱怨Vi编辑器不象DOS下的编辑器如edit那么好用,这 是因为Vi考虑到各种用户的需要,没有使用某些通用的编 ...
- 昨天一日和彭讨论post请求数据的问题
上午写了一个for循环,下午与同学视频才知道没有解决根本问题,接口是url单个的数据请求,而导入的是多个员工的考勤数据也就是要有多个请求同时发出,利用这个做法是有链接超时的情况,所以昨天晚上彭为了导入 ...
- 重温WCF之WCF传输安全(十三)(1)前期准备之证书制作(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/12/2682372.html 一.WCF中的安全方式 说到安全就会涉及到认证,消息一致性和机密性 ...
- Delphi面向对象编程
一.面向对象介绍 OOP是使用独立的对象(包含数据和代码)作为应用程序模块的范例.虽然OOP不能使得代码容易编写,但是它能够使得代码易于维护.将数据和代码结合在一起,能够使定位和修复错误的工作简单化, ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...
- ora-01658 :无法为表空间USERS 中的段创建INITIAL区
"CREATE INDEX "IDX_TS_BONUS_Q_201209_DS" ON "TS_BONUS_Q_201209" ("DS&q ...
- 安装oracle 10g RAC执行的几个脚本说明
1,/u01/app/oracle/oraInventory/orainstRoot.sh 脚本 #!/bin/sh if [ -d "/etc" ]; then /etc; fi ...