【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 和队伍 ...
随机推荐
- zstu-3769 数回文子串
思路:用manacher求出每个位置的半径,相加即可. 代码:[rad[i]/2]即i这个位置的回文半径,添加的'#'代表长度为偶数的串. #include<stdio.h> #inclu ...
- js confirm()方法的使用方法实例
今天学习了js 中confirm的使用方法,confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框. 如果用户点击确定按钮,则 confirm() 返回 true.如果点击取消按 ...
- maven总结2
依赖 maven版本:apache-maven-3.1.1 IDE: springsource 默认支持maven集成 若使用的是eclipse,则需要先安装m2ec ...
- 转 异常处理汇总 ~ 修正果带着你的Net飞奔吧!
异常处理汇总 ~ 修正果带着你的Net飞奔吧! 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具 h ...
- RDLC系列之五 初试XAML
本章只讲解xaml部分,其余都和winform下一样 1.xaml代码 <Window x:Class="RDLC.WPF.MainWindow" xmlns="h ...
- KeyBord事件分发和接收简要过程代码示例
step1:调用ViewRootImpl的内部类ImeInputStage的成员函数onProcess来判断输入法是否处于激活状态 final class ImeInputStage extends ...
- 检查c# 内存泄漏
c# 内存泄漏检查心得 系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform ...
- android.hardware.Camera类及其标准接口介绍
android.hardware.Camera类及其标准接口介绍,API level 19 http://developer.android.com/reference/android/hardwar ...
- 做中学learning by doing——个人感想20155312张竞予
做中学learning by doing--个人感想 概要 阅读五篇博客后的感触 我的个人技能 个人经验的类比与总结 c语言学习情况 java学习目标及规划 公文写作能力 我的感触 仔细阅读了老师公众 ...
- 身份证号码自动生成程序(Python)
今天收到一个小需求:需要一个自动生成身份证号码的小程序.近期用python较多,因此打算用python实现. 需求细化: 1.身份证必须能够通过身份证校验程序. 2.通过查询,发现身份证号码是有国家标 ...