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的更多相关文章

  1. 【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 ...

  2. 【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 ...

  3. 【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 ...

  4. 【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 ...

  5. 【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 ...

  6. 【最大流】ECNA 2015 F Transportation Delegation (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: N(N<=600)个点,每个点有个名字Si,R(R<=200)个生产商在R个点上,F(F<= ...

  7. 【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空 ...

  8. 【宽搜】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) ...

  9. 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)

    [题意] 有n个队伍进行比赛,每场比赛,恰好有一支队伍取胜.一支队伍败.每个队伍需要打的比赛场数相同,给你每个队伍目前已经赢得场数和输得场数,再给你一个矩阵,第 i 行第 j 列 表示队伍 i 和队伍 ...

随机推荐

  1. 学习web前端三个月感悟

    总结一下自己学习前端三个月的进步和不足: 其实也算机遇,开学时,便有一个PHP培训,只记得当时拿到培训课程的时候,第一感觉就是 好难,什么留言板制作,学生信息系统的制作,navicat和PHP结合使用 ...

  2. Unity原厂讲师大解密

    Asset Bundle工作流程及人物换装实例- 刘刚 Unity内部的资源有两种 Resources:有10年历史,尽量用资产包 Asset Bundle:昵称AB,现今Unity处理资源的中心 A ...

  3. WPF - MVVM - 如何将ComboBox的Selectchange事件binding到ViewModel

    转:http://www.cnblogs.com/mantian/p/3713524.html 将所有的事件,属性,都映射到ViewModel中.好处多多,以后开发尽量用这种模式. 解决方法: 使用S ...

  4. 入门Linux

    45分钟带你入门Linux(附:笔者在工作室开讨论班录制的视频讲解)   第一部分    熟悉Linux基本操作 一.初识Linux 1.Linux特点 ◊  开放性 ◊  多用户 ◊  多任务 ◊  ...

  5. Linux 网络编程一(TCP/IP协议)

    以前我们讲过进程间通信,通过进程间通信可以实现同一台计算机上不同的进程之间通信. 通过网络编程可以实现在网络中的各个计算机之间的通信. 进程能够使用套接字实现和其他进程或者其他计算机通信. 同样的套接 ...

  6. 3D数学基础:3D游戏动画中欧拉角与万向锁的理解

    首先来看一下什么是欧拉角(Euler angles)?构件在三维空间中的有限转动,可依次用三个相对转角表示,即进动角.章动角和自旋角,这三个转角统称为欧拉角.——引自百度百科莱昂哈德·欧拉用欧拉角来描 ...

  7. SOAP和WSDL的一些必要知识(转)

    原文地址:SOAP和WSDL的一些必要知识 SOAP和WSDL对Web Service.WCF进行深入了解的基础,因此花一些时间去了解一下是很有必要的. 一.SOAP(Simple Object Ac ...

  8. Google protocol buffer在windows下的编译

    在caffe框架中,使用的数据格式是google的 protocol buffer.对这个不了解,所以,想简单学习一下.简单来说,Protocol Buffer 是一种轻便高效的结构化数据存储格式,可 ...

  9. [CareerCup] 13.6 Virtual Destructor 虚析构函数

    13.6 Why does a destructor in base class need to be declared virtual? 这道题问我们为啥基类中的析构函数要定义为虚函数.首先来看下面 ...

  10. LeetCode:Pascal's Triangle I II

    LeetCode:Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For examp ...