【UVALive 3905】BUPT 2015 newbie practice #2 div2-D-3905 - Meteor
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/D
The famous Korean internet company has provided an internet-based photo service which allows The famous Korean internet company users to directly take a photo of an astronomical phenomenon in space by controlling a high-performance telescope owned by . A few days later, a meteoric shower, known as the biggest one in this century, is expected. has announced a photo competition which awards the user who takes a photo containing as many meteors as possible by using the photo service. For this competition, provides the information on the trajectories of the meteors at their web page in advance. The best way to win is to compute the moment (the time) at which the telescope can catch the maximum number of meteors. You have n meteors, each moving in uniform linear motion; the meteor mi moves along the trajectory pi + t × vi over time t, where t is a non-negative real value, pi is the starting point of mi and vi is the velocity of mi . The point pi = (xi , yi) is represented by X-coordinate xi and Y -coordinate yi in the (X, Y )-plane, and the velocity vi = (ai , bi) is a non-zero vector with two components ai and bi in the (X, Y )-plane. For example, if pi = (1, 3) and vi = (−2, 5), then the meteor mi will be at the position (0, 5.5) at time t = 0.5 because pi + t × vi = (1, 3) + 0.5 × (−2, 5) = (0, 5.5). The telescope has a rectangular frame with the lower-left corner (0, 0) and the upper-right corner (w, h). Refer to Figure 1. A meteor is said to be in the telescope frame if the meteor is in the interior of the frame (not on the boundary of the frame). For example, in Figure 1, p2, p3, p4, and p5 cannot be taken by the telescope at any time because they do not pass the interior of the frame at all. You need to compute a time at which the number of meteors in the frame of the telescope is maximized, and then output the maximum number of meteors. Figure 1 Input Your program is to read the input from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case starts with a line containing two integers w and h (1 ≤ w, h ≤ 100, 000), the width and height of the telescope frame, which are separated by single space. The second line contains an integer n, the number of input points (meteors), 1 ≤ n ≤ 100, 000. Each of the next n lines contain four integers xi , yi , ai , and bi ; (xi , yi) is the starting point pi and (ai , bi) is the nonzero velocity vector vi of the i-th meteor; xi and yi are integer values between -200,000 and 200,000, and ai and bi are integer values between -10 and 10. Note that at least one of ai and bi is not zero. These four values are separated by single spaces. We assume that all starting points pi are distinct. Output Your program is to write to standard output. Print the maximum number of meteors which can be in the telescope frame at some moment. Sample Input 2 4 2 2 -1 1 1 -1 5 2 -1 -1 13 6 7 3 -2 1 3 6 9 -2 -1 8 0 -1 -1 7 6 10 0 11 -2 2 1 -2 4 6 -1 3 2 -5 -1 Sample Output 1 2
题解:(题目这里也有)网上有刘汝佳的题解
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
struct Event
{
double x;
int type;
bool operator < (const Event& a) const
{
return x < a.x || (x == a.x && type > a.type);
}
}event[maxn*]; void update(int x, int a, int w, double& l, double& r)
{
if(a == )
{
if(x <= || x >= w)
r = l - ;//无解
}
else if(a > )//0 < x+at < w <=> t > -x/a && t < (w-x)/a
{
l = max(l, -(double)x/a);
r = min(r, (double)(w-x)/a);
}
else if(a < )//0 < x+at < w <=> t < -x/a && t > (w-x)/a
{
l = max(l, (double)(w-x)/a);
r = min(r, -(double)x/a);
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int w, h, n, e = ;
scanf("%d %d %d", &w, &h, &n);
for(int i = ; i < n; i++)
{
int x, y, a, b;
scanf("%d %d %d %d", &x, &y, &a, &b);
double l = , r = 1e9;
update(x, a, w, l, r);
update(y, b, h, l, r);
if(l < r)
{
event[e++]= (Event){l, };
event[e++]= (Event){r, };
}
}
sort(event, event+e);
int cnt = ;
int ans = ;
for(int i = ; i < e; i++)
{
if(event[i].type == )
cnt++;
else
cnt--;
ans = max(ans, cnt);
}
printf("%d\n", ans);
}
return ;
}
我的题解:
各种条件的判断,注意不要写错>、<
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std; int t,n,w,h,ans=,numOfXing,validNum,valid;
double x,y,vx,vy,iT,oT,inTime[],outTime[]; int main()
{
scanf("%d",&t);
while(t--)
{
memset(inTime,,sizeof(inTime));
memset(outTime,,sizeof(outTime));
validNum=;
ans=;
scanf("%d%d%d",&w,&h,&n);
for(int i=; i<=n; i++)
{
valid=;
iT=oT=;
scanf("%lf%lf%lf%lf",&x,&y,&vx,&vy);
if(y<=&&vy<=||y>=h&&vy>=||x<=&&vx<=||x>=w&&vx>=)
valid=;
else if(vy==)
{
if((x<=||x>=w)&&x*vx<=)
iT=min(-x/vx,(w-x)/vx);
oT=max(-x/vx,(w-x)/vx);
}
else if(vx==)
{
if((y<=||y>=h)&&y*vy<=)
iT=min(-y/vy,(h-y)/vy);
oT=max(-y/vy,(h-y)/vy);
}
else
{
if(x<=||x>=w||y<=||y>=h)
{
if(x*vy/vx<y&& y+(w-x)*vy/vx<h||h+x*vy/vx>y&&y+(w-x)*vy/vx>)
iT=max(min(-x/vx,(w-x)/vx),min(-y/vy,(h-y)/vy));
else valid=;
}
oT=min(max(-x/vx,(w-x)/vx),max(-y/vy,(h-y)/vy));
} if(valid)
{
validNum++;
inTime[validNum]=iT;
outTime[validNum]=oT;
}
}
sort(inTime+,inTime+validNum+);
sort(outTime+,outTime+validNum+);
int j=;
numOfXing=;
for(int i=; i<=validNum; i++)
{
numOfXing++;
while(outTime[j]<=inTime[i]&&j<=validNum)
{
j++;
numOfXing--;
}
ans=max(ans,numOfXing);
}
printf("%d\n",ans);
}
}
【UVALive 3905】BUPT 2015 newbie practice #2 div2-D-3905 - Meteor的更多相关文章
- 【CodeForces 312B】BUPT 2015 newbie practice #3A Archer
题 SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to shoot in the targ ...
- 【CodeForces 605A】BUPT 2015 newbie practice #2 div2-E - Sorting Railway Cars
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/E Description An infinitely lon ...
- 【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/C Description I’ve bought an or ...
- 【UVA 401】BUPT 2015 newbie practice #2 div2-B-Palindromes
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/B A regular palindrome is a str ...
- 【UVA 11078】BUPT 2015 newbie practice #2 div2-A -Open Credit System
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/A In an open credit system, the ...
- 【最大流】ECNA 2015 F Transportation Delegation (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: N(N<=600)个点,每个点有个名字Si,R(R<=200)个生产商在R个点上,F(F<= ...
- 【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空 ...
- 【宽搜】ECNA 2015 E Squawk Virus (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: N个点M条无向边,(N<=100,M<=N(N-1)/2),起始感染源S,时间T(T<10) ...
- 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)
[题意] 有n个队伍进行比赛,每场比赛,恰好有一支队伍取胜.一支队伍败.每个队伍需要打的比赛场数相同,给你每个队伍目前已经赢得场数和输得场数,再给你一个矩阵,第 i 行第 j 列 表示队伍 i 和队伍 ...
随机推荐
- 小白有问题-下雨天给linux装adobe flash player更配
上班出门还没下雨天气闷热,现在的外面下的却是倾盆大雨.还好出门带了伞,内心还是快乐的. 上班我们都是用的Debian系统,平时没事上上网偶尔会遇到提示没安装flash的问题,正好现在没啥事,就打算把它 ...
- Unity3D实现赛车的灯光效果
车灯的需求 在赛车游戏中,遇到灯光弱的环境,赛车车可以打开前车灯照亮路边及前方,那一定是非常酷! 也见过虚拟现实项目通过Unity模拟汽车车灯的效果,但是我还没有想到好的思路来实现. 我的思路 使用( ...
- C++基础笔记(二)C++对C的扩展
Xcode创建C++项目 1.新建一个MAC工程(command line tool) 2.导入头文件 3.修改文件后缀(*.m-->*.mm) 4.修改主函数中的OC代码为C++的代码 动 ...
- 手机中点击链接或button按钮出现黄色边框的解决办法
a,input,button{outline: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-focus-rin ...
- WinForm中异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
- 对兼容ie浏览器所遇到的问题及总结
1,若直接给一个元素设置absolute定位.在浏览器缩放的时候.位置会错位.解决的方法是给外层的元素设置为relative定位. 2,低版本ie浏览器不支持placeholder属性 3,盒模型上规 ...
- 完美隐藏win7文件和文件夹
有没有一种方法即使使用隐藏模式也不能查看, 没错可以用上帝模式....... 啥是Win7上帝模式?不知道的看看..... <<<<<<<<<&l ...
- Google java代码风格导入Eclipse
Git地址 https://github.com/codeset/google-java-styleguide 下载配置文件在Eclipse中执行导入:Window -> Preferences ...
- LeetCode 笔记21 生成第k个排列
题目是这样的: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all ...
- 20145215《Java程序设计》第9周学习总结
20145215<Java程序设计>第九周学习总结 教材学习内容总结 整合数据库 JDBC入门 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操 ...