Cogs 1995. Yukari
1995. Yukari
★★☆ 输入文件:camera.in 输出文件:camera.out 简单对比
时间限制:1 s 内存限制:128 MB
题目背景:
幻想乡的创始人之一,八云紫,有着强大的控制结界的能力,可以瞬间消除一定范围内所有弹幕。我们可以将其消除范围视为一个矩形,而弹幕可以视为动点。
八云紫想要嘲讽她的敌人,所以她希望只使用一次消除能力,尽可能多地消除弹幕。
请你告诉她,在哪一时刻使用道具,可以消除尽可能多的弹幕。
问题描述:
在平面上给定一个矩形区域(也可能退化成线段或者点)。
矩形的边与坐标轴平行,左下端点为 (xl,yl),右上端点为 (xr,yr)。
给定 n 个动点,初始坐标为 (xi, yi),运动方向为 (ui,vi),速度为 sqrt((ui)^2+(vi)^2)
求在哪一时刻 t (t ∈ N),在矩形内部及边界的动点数目最多。
如果有多个 t 满足条件,输出最小的 t 即可。
输入格式:
第一行 5 个正整数,n, xl, yl, xr, yr,表示动点个数和矩形区域。
接下来 n 行,每行 4 个整数,xi, yi, ui, vi ,描述第 i 个动点。
输出格式:
在矩形内部及边界的动点数目最多的时刻 t (t ∈ N)。
如果有多个 t 满足条件,输出最小的 t 即可。
样例数据1:
|
camera.in |
camera.out |
|
2 2 2 3 3 3 1 -1 1 2 3 1 -1 |
1 |
样例数据2:
|
camera.in |
camera.out |
|
13 44 68 49 73 40 46 2 6 28 75 4 -1 32 61 3 3 41 64 2 1 40 99 2 -7 54 49 -2 6 32 80 4 -2 73 99 -7 -7 23 93 6 -5 44 96 0 -6 36 70 3 0 70 98 -6 -7 75 53 -7 4 |
4 |
数据范围:
对于前 40% 数据,
1<= n <= 100, 1 <= xl, xr, yl, yr, xi, yi <= 100, -10 <= ui, vi <= 10
对于100% 数据,
1<= n <= 10^5, 1 <= xl, xr, yl, yr, xi, yi <= 10^9, 0 <= |ui|, |vi|<= 10^5, xl <= xr, yl <= yr
保证 n,xl,xr,yl,yr,xi,yi,ui,vi 均为整数.
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 1000010
using namespace std;
int n,xl,yl,xr,yr;
int tot,cnt,sum[maxn],cnt1;
double l[maxn],r[maxn],h[maxn*],h1[maxn*];
int find(int x){
int l=,r=cnt,res=;
while(l<=r){
int mid=(l+r)>>;
if(h[mid]<=x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
int main(){
//freopen("camera.in","r",stdin);freopen("camera.out","w",stdout);
freopen("Cola.txt","r",stdin);
scanf("%d%d%d%d%d",&n,&xl,&yl,&xr,&yr);
int x,y,u,v;
int t1,t2,sx1,sx2,sy1,sy2;
memset(r,,sizeof(r));
for(int i=;i<=n;i++){
scanf("%d%d%d%d",&x,&y,&u,&v);
if((x<xl&&u<=)||(x>xr&&u>=)||(y<yl&&v<=)||(y>yr&&v>=))continue;
tot++;
if(x<=xr&&x>=xl&&y<=yr&&y>=yl){
l[tot]=;
if(u>)r[tot]=min(r[tot],(double)(xr-x)/u);
if(u<)r[tot]=min(r[tot],(double)(xl-x)/u);
if(v>)r[tot]=min(r[tot],(double)(yr-y)/v);
if(v<)r[tot]=min(r[tot],(double)(yl-y)/v);
}
else{
if(u>){//向右飞
l[tot]=max(l[tot],(double)(xl-x)/u);//飞到左边界
r[tot]=min(r[tot],(double)(xr-x)/u);//飞到右边界
}
if(u<){//向左飞
l[tot]=max(l[tot],(double)(xr-x)/u);//飞到右边界
r[tot]=min(r[tot],(double)(xl-x)/u);//飞到左边界
} if(v>){//向上飞
l[tot]=max(l[tot],(double)(yl-y)/v);
r[tot]=min(r[tot],(double)(yr-y)/v);
}
if(v<){//向下飞
l[tot]=max(l[tot],(double)(yr-y)/v);
r[tot]=min(r[tot],(double)(yl-y)/v);
}
}
}
//for(int i=1;i<=n;i++)printf("%.2lf %.2lf\n",l[i],r[i]);
for(int i=;i<=tot;i++){
h1[++cnt1]=l[i];
h1[++cnt1]=r[i];
}
sort(h1+,h1+cnt1+);
h[++cnt]=h1[];
for(int i=;i<=cnt1;i++)
if(h1[i]!=h1[i-])h[++cnt]=h1[i];
for(int i=;i<=tot;i++){
int pos=find(l[i]);
sum[pos]++;
pos=find(r[i]);
sum[pos+]--;
}
int mx=,id=;
for(int i=;i<=n;i++){
sum[i]+=sum[i-];
if(sum[i]>mx)mx=sum[i],id=i;
}
printf("%.0lf",h[id]);
}
30分 算出所有弹幕出现的时间段+离散化+差分
#include<cstdio>
#include<algorithm>
using namespace std;
int INF=0x7fffffff;
int in[]={},out[]={};
int a[]={};
int main(){
freopen("camera.in","r",stdin);
freopen("camera.out","w",stdout);
int i,n,xl,yl,xr,yr,cnt=,sum=,maxc=,ans;
scanf("%d%d%d%d%d",&n,&xl,&yl,&xr,&yr);
for(i=;i<n;i++){
int x,y,u,v;
int txs=-,txe=INF,tys=-,tye=INF,ts=-,te=-;
scanf("%d%d%d%d",&x,&y,&u,&v);
if((x<xl&&u<=)||(x>xr&&u>=))continue;
if((y<yl&&v<=)||(y>yr&&v>=))continue;
if(x>=xl&&x<=xr&&y>=yl&&y<=yr){
ts=;
if(u==&&v==)te=INF;
else if(u==){
if(v>)te=(yr-y)/v;
else{v=-v;te=(y-yl)/v;}
}
else if(v==){
if(u>)te=(xr-x)/u;
else{u=-u;te=(x-xl)/u;}
}
else{
if(u>)txe=(xr-x)/u;
else{u=-u;txe=(x-xl)/u;}
if(v>)txe=(yr-y)/v;
else{v=-v;tye=(y-yl)/v;}
te=min(txe,tye);
}
}
else{
if(u<)u=-u;
if(v<)v=-v;
if(u==){
if(y
<=yl){tys=(yl-y+v-)/v;tye=(yr-y)/v;}
if(y>=yr){tys=(y-yr+v-)/v;tye=(y-yl)/v;}
}
else if(v==){
if(x<=xl){txs=(xl-x+u-)/u;txe=(xr-x)/u;}
if(x>=xr){txs=(x-xr+u-)/u;txe=(x-xl)/u;}
}
else{
if(x<=xl){txs=(xl-x+u-)/u;txe=(xr-x)/u;}
if(x>=xr){txs=(x-xr+u-)/u;txe=(x-xl)/u;}
if(y<=yl){tys=(yl-y+v-)/v;tye=(yr-y)/v;}
if(y>=yr){tys=(y-yr+v-)/v;tye=(y-yl)/v;}
}
ts=max(txs,tys);
te=min(txe,tye);
}
in[cnt]=ts;out[cnt++]=te;
}
for(i=;i<=cnt-;i++){a[in[i]]++;a[out[i]+]--;}
for(i=;i<=cnt-;i++){sum+=a[i];if(sum>maxc){maxc=sum;ans=i;}}
printf("%d",ans);
return ;
}
Cogs 1995. Yukari的更多相关文章
- HDU4430 Yukari's Birthday(枚举+二分)
Yukari's Birthday HDU4430 就是枚举+二分: 注意处理怎样判断溢出...(因为题目只要10^12) 先前还以为要用到快速幂和等比数列的快速求和(但肯定会超__int64) 而 ...
- 【COGS 254】【POI 2001】交通网络图
http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...
- POJ 1995 快速幂模板
http://poj.org/problem?id=1995 简单的快速幂问题 要注意num每次加过以后也要取余,否则会出问题 #include<iostream> #include< ...
- 【COGS】894. 追查坏牛奶
http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...
- poj 1995 裸快速幂
1. poj 1995 Raising Modulo Numbers 2.链接:http://poj.org/problem?id=1995 3.总结:今天七夕,来发水题纪念一下...入ACM这个坑 ...
- [codevs 1995]黑魔法师之门(并查集)
题目:http://codevs.cn/problem/1995/ 分析:脑补一下满足题目要求的子图肯定就是环……于是题目就变成了不断加边求环的个数.看起来有点麻烦……但是环的实质是几个小环组合起来的 ...
- 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)
http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...
- 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)
http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...
- 【COGS & USACO】896. 圈奶牛(凸包)
http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...
随机推荐
- Firefox 不知道如何打开此地址,因为协议 (javascrpit) 未和任何程序关联.
用火狐打开出现这个错误,360没事:这个是什么原因???怎么解决?代码:<a href="javascrpit:;"onclick="showD('pas','ri ...
- [原]NYOJ-括号匹配-2(java)
大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号配对问题 时间限制:3000 ms | 内存限制:65535 KB ...
- Qt Create 4.6.2无法自动生成Android Kit
开发环境: OS,Microsoft Windows [Version 10.0.17134.523] Qt,5.11.1 Qt Creator,4.6.2 JDK,1.8.0_181 Android ...
- IP通信中音频编解码技术与抗丢包技术概要
此文较长,建议收藏起来看. 一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一 ...
- [基本操作]线段树分治和动态dp
不知道为什么要把这两个没什么关系的算法放到一起写...可能是都很黑科技? 1.线段树分治 例题:bzoj4026 二分图 给你一个图,资瓷加一条边,删一条边,询问当前图是不是二分图 如果用 LCT 的 ...
- Bootstrap CSS教程
Bootstrap 教程 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加 ...
- 服务注册选型比较:Consul vs Zookeeper vs Etcd vs Eureka
zookeeper基于paxos的化简版zab,etcd基于raft算法.consul也是基于raft算法.etcd和consul作为后起之秀,并没有因为已经有了zookeeper而放弃自己,而是采用 ...
- JUI web企业应用框架 http://jui.org/
官方网址: http://jui.org/ 这是一个很好的开发控件
- 【转】 Pro Android学习笔记(七六):服务(1):local和remote
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...
- ios判断是否为iphone6或iphone6plus代码
转自:http://blog.csdn.net/lvxiangan/article/details/45288505 #define IS_IPAD (UI_USER_INTERFACE_IDIOM( ...