【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 和队伍 ...
随机推荐
- HDU 5056 Boring Count --统计
题解见官方题解,我这里只实现一下,其实官方题解好像有一点问题诶,比如 while( str[startPos] != str[i+1] ) cnt[str[startPos]]--, startPos ...
- UVA 439 Knight Moves --DFS or BFS
简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...
- SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- Android配置----小米手机通过wifi连接ADB调试Android应用
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Cg关键字(keywords)
保留标识符 除了下面列出的,任何以两个的下划线作为前缀(例如,__ newType)的标识符被保留. 注意,矩阵(matrix)和向量类型(vector types)(如half2x3或float4) ...
- Unity 协程与线程
协程是不同步的 协程 不是 线程,协同程序是 不同步 的 一个线程在程序中和其他线程是异步运行的,在多处理器机器中一个线程可以同时与所有其他线程的实时运行其代码,这使得线程编程能够解决很复杂的事情,因 ...
- Unity-WIKI 之 AnimationToPNG
组件功能 把3D角色的动画录制成PNG一帧一帧输出,这是一个件多么美好的事! 可能遇到问题 有可能当你新建完脚本时会出现下面的错误: `System.IO.File' does not contain ...
- AndroidStudio出现“Plugin is too old, please update to a more recent”问题
可能原因: 你AS版本不够高....能够更新的话你更新试下,不能更新删了最新的sdk,不要下载4.4以上的版本 解决方法如下 第一种,最简单,但是不推荐这么做 将build.gradle 里的类似 c ...
- 10301 MySQL各个版本区别及下载
参考:http://www.admin10000.com/document/62.html MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会 ...