HDU 4938 Seeing People(2014 Multi-University Training Contest 7)
思路:根据出发时间把点往速度反方向移动 t*v的 的距离这样就可以当成 全部点一起出发,再把y轴上的点固定不动相当于x轴的点向(-v2,v1)方向移动 。可以把所有点映射到x轴上进行统计即可(要记住同一类型的点事不能相互看到的。因为出发时间不同,就算在x轴上有相同映射点也一样)任务就是 统计每个点能看到多少不同于本身类型的点。 注意在映射的时候由于原先x轴上的点视线是水平的不用改 。y轴上的点原先视线是垂直的要根据夹角转映射到水平。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<time.h>
#include<string>
#define REP(i,n) for(int i=0;i<n;++i)
#define REP1(i,a,b) for(int i=a;i<=b;++i)
#define REP2(i,a,b) for(int i=a;i>=b;--i)
#define MP make_pair
#define LL long long
#define X first
#define Y second
#define MAXN 100050
#define eps 1e-8
using namespace std;
struct Point {
double x, y;
} p1[MAXN], p2[MAXN];
struct Line {
Point p, q;
};
Point Intersect(Line u, Line v) //求两直线交点,需要先判是否平行
{
Point ret = u.p;
double t = ((u.p.x - v.p.x) * (v.p.y - v.q.y)
- (u.p.y - v.p.y) * (v.p.x - v.q.x))
/ ((u.p.x - u.q.x) * (v.p.y - v.q.y)
- (u.p.y - u.q.y) * (v.p.x - v.q.x));
ret.x += (u.q.x - u.p.x) * t;
ret.y += (u.q.y - u.p.y) * t;
return ret;
}
struct node {
double x, w;
int id, type;
} s[MAXN];
bool cmp1(node a, node b) {
return a.x < b.x - eps || (fabs(a.x - b.x) < eps && a.type < b.type);
}
bool cmp2(node a, node b) {
return a.x < b.x - eps || (fabs(a.x - b.x) < eps && a.type > b.type);
}
int d[MAXN];
int ans[MAXN];
int main() {
int tt, ri = , n;
scanf("%d", &tt);
while (tt--) {
Line L;
L.p.x = L.p.y = L.q.y = ;
L.q.x = ;
double v1, v2;
scanf("%d%lf%lf", &n, &v1, &v2);
double si = v1 / sqrt(v1 * v1 + v2 * v2);
REP(i,n)
{
double a, t, p, w;
scanf("%lf%lf%lf%lf", &a, &t, &p, &w);
Line L1;
if (a == ) {
L1.p.x = 1.0*p;
L1.p.y = -1.0*t * v1;
L1.q.x = 1.0*p - v2;
L1.q.y = -1.0*t * v1 + v1;
} else {
L1.p.x = -1.0*t * v2;
L1.p.y = 1.0*p;
L1.q.x = -1.0*t * v2 - v2;
L1.q.y = 1.0*p + v1;
}
Point e = Intersect(L, L1);
s[i].x = e.x;
s[i].type = a;
if(a==)
s[i].w = w ;
else
s[i].w=w*1.0*v2/v1;
s[i].id = i;
}
sort(s, s + n, cmp1);
d[n] = ;
for (int i = n - ; i >= ; --i) {
d[i] = d[i + ];
if (s[i].type == ) {
d[i]++;
continue;
}
int l, r; l = i;
r = n - ;
while (r - l > ) {
int mid = (l + r) >> ;
if (s[mid].x - s[i].x > s[i].w + eps)
r = mid;
else
l = mid;
}
if (s[r].x - s[i].x < s[i].w + eps)
ans[s[i].id] = d[i]-d[r+];
else
ans[s[i].id] = d[i] - d[r];
} sort(s, s + n, cmp2);
d[n] = ;
for (int i = n - ; i >= ; --i) {
d[i] = d[i + ];
if (s[i].type == ) {
d[i]++;
continue;
}
int l, r; l = i;
r = n - ;
while (r - l > ) {
int mid = (l + r) >> ;
if (s[mid].x - s[i].x > s[i].w + eps)
r = mid;
else
l = mid;
}
if (s[r].x - s[i].x < s[i].w + eps)
ans[s[i].id] = d[i]-d[r+];
else
ans[s[i].id] = d[i] - d[r];
}
printf("Case #%d:\n",++ri);
for(int i=;i<n;++i)
printf("%d\n",ans[i]);
}
return ;
}
HDU 4938 Seeing People(2014 Multi-University Training Contest 7)的更多相关文章
- HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5
思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...
- HDU 6125 - Free from square | 2017 Multi-University Training Contest 7
思路来自这里 - - /* HDU 6125 - Free from square [ 分组,状压,DP ] | 2017 Multi-University Training Contest 7 题意 ...
- HDU 6129 - Just do it | 2017 Multi-University Training Contest 7
比赛时脑子一直想着按位卷积... 按题解的思路: /* HDU 6129 - Just do it [ 规律,组合数 ] | 2017 Multi-University Training Contes ...
- HDU 6088 - Rikka with Rock-paper-scissors | 2017 Multi-University Training Contest 5
思路和任意模数FFT模板都来自 这里 看了一晚上那篇<再探快速傅里叶变换>还是懵得不行,可能水平还没到- - 只能先存个模板了,这题单模数NTT跑了5.9s,没敢写三模数NTT,可能姿势太 ...
- HDU 6093 - Rikka with Number | 2017 Multi-University Training Contest 5
JAVA+大数搞了一遍- - 不是很麻烦- - /* HDU 6093 - Rikka with Number [ 进制转换,康托展开,大数 ] | 2017 Multi-University Tra ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
- HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
/* HDU 6073 - Matching In Multiplication [ 图论 ] | 2017 Multi-University Training Contest 4 题意: 定义一张二 ...
- HDU 6057 - Kanade's convolution | 2017 Multi-University Training Contest 3
/* HDU 6057 - Kanade's convolution [ FWT ] | 2017 Multi-University Training Contest 3 题意: 给定两个序列 A[0 ...
- HDU 6061 - RXD and functions | 2017 Multi-University Training Contest 3
每次NTT都忘记初始化,真的是写一个小时,Debug两个小时- - /* HDU 6061 - RXD and functions [ NTT ] | 2017 Multi-University Tr ...
- HDU 6060 - RXD and dividing | 2017 Multi-University Training Contest 3
/* HDU 6060 - RXD and dividing [ 分析,图论 ] | 2017 Multi-University Training Contest 3 题意: 给一个 n 个节点的树, ...
随机推荐
- Bootstrap_缩略图
缩略图在网站中最常用的地方就是产品列表页面,一行显示几张图片,有的在图片底下(左侧或右侧)带有标题.描述等信息. Bootstrap框架将这一部独立成一个模块组件.并通过“thumbnail”样式配合 ...
- sort排序
/*问题 L: 使用sort排序题目描述标准库的sort函数给我们提供了一个很方便的排序的方法,光听别人说方便不顶事,得自己亲自实践一下才能体会到它的方便之处. 输入每组包含多组数据,每组数据第一行包 ...
- ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机
ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机 如果你所用的framework支持真机和模拟器多种CPU架构,而你需要的是其中的一种或几种,那么可以可以从framewo ...
- javascriptの循序渐进(一)
javascriptの循序渐进系列为<javascript高级程序设计>的读书笔记,记录了看书过程中觉得重点的地方和一些总结,为学习javascript打好基础. ------------ ...
- CheckBox复选框全选以及获取值
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Nginx
Nginx的常识 1.nginx三大功能:(百万级别繁忙服务器占有率) 1)web服务器 轻量级,处理的并发量更大. 2)反向代理服务器 通过将用户端的请求,透明的转送给应用服务器.这样所 有的客户端 ...
- USB传输协议。——Arvin
问题一:USB的传输线结构是如何的呢? 答案一:一条USB的传输线分别由地线.电源线.D+.D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS的5V电平不同),而电源 ...
- SQL Server Reporting Service(SSRS) 第一篇 我的第一个SSRS例子
很早就知道SQL SERVER自带的报表工具SSRS,但一直没有用过,最近终于需要在工作中一展身手了,于是我特地按照自己的理解做了以下总结: 1. 安装软件结构 SSRS全称SQL Server Re ...
- 【High-Speed and Accurate Laser Scan Matching Using Classified Features】
所谓的"分类特征",就是把特征分成 1. 旋转特征:用直线表示 2. 平移特征,用撕裂点和临界点表示 最大的创新点 应该就是下面的分组吧 匹配的时候,用RANSAC 或者动态规划, ...
- js时间处理
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 // (new Dat ...