BZOJ2328: [HNOI2011]赛车游戏

Description


题解Here!

一开始被题面那一长串的描述吓到了,一直没敢做。。。
然后尝试着硬着头皮读懂题面。
然后。。。这不是贪心么???

从耗油量最少开始慢慢贪心地调整。
对于上坡,速度设为$0$,但是免不了耗油,这一部分的耗油先减掉。
对于下坡,速度在不耗油的前提下设到最大(但是不能超过$vmax$)。
对于平路,速度设为$0$。
然后我们用一个优先队列来维护这些线段,每次取出速度最小的段,如果它的速度和次小的速度一样就合并起来,否则将它的速度提升到和次小的速度一样。

当然这是在油够用的前提下,如果油不够用就提到能提到的最高速率。
这样做直到用光油或者都打到$vmax$时结束。
证明?$\tan(\frac{\pi}{2}+k\pi),k\in Z$。。。

附代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#define eps (1e-8)
using namespace std;
int n;
double A,B,maxn,f;
bool flag;
struct node{
double oil,dis;
friend bool operator <(const node &p,const node &q){
return p.oil>q.oil;
}
};
priority_queue<node> q;
inline int check(double x){
if(fabs(x)<eps)return 0;
return (x>0?1:-1);
}
void work(){
if(!flag){
printf("IMPOSSIBLE\n");
while(!q.empty())q.pop();
return;
}
double w,ans=0;
node u,v;
q.push((node){maxn,0});
while(check(f)>0&&!q.empty()){
u=q.top();
q.pop();
v=q.top();
if(check(u.oil-maxn)==0)ans+=u.dis/u.oil;
else if(check(u.oil-v.oil)!=0){
w=f/(A*u.dis);
if(check(u.oil-v.oil+w)>=0){
w=v.oil-u.oil;
q.pop();
q.push((node){v.oil,u.dis+v.dis});
}
else{
u.oil+=w;
q.push(u);
}
f-=A*w*u.dis;
}
else{
q.pop();
q.push((node){v.oil,u.dis+v.dis});
}
}
while(!q.empty()){
u=q.top();
q.pop();
ans+=u.dis/u.oil;
}
printf("%.5lf\n",ans);
}
void init(){
double x,y,w,l;
scanf("%lf%lf%lf%lf%d",&A,&B,&maxn,&f,&n);
flag=true;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&x,&y);
x/=1000.0;y/=1000.0;
w=y/x;
l=sqrt(x*x+y*y);
if(check(w)>0){
f-=w*B*l;
q.push((node){0,l});
if(check(f)<=0)flag=false;
}
else if(check(w)<0)q.push((node){min(-w*B/A,maxn),l});
else q.push((node){0,l});
}
}
int main(){
int t;
scanf("%d",&t);
while(t--){
init();
work();
}
return 0;
}

BZOJ2328: [HNOI2011]赛车游戏的更多相关文章

  1. 【BZOJ2328】 [HNOI2011]赛车游戏

    BZOJ2328 [HNOI2011]赛车游戏 前言 这道题目我真的佛了,卡精度+卡时间这就是下一个聊天鬼才. Solution 首先可以二分出最大速度,然后考虑下坡的话可能有更好的解,然后这样子算一 ...

  2. [HNOI2011]赛车游戏

    题目描述 名歌手LAALA最近迷上了一款赛车游戏,游戏中开车的玩家在不同的路段需要选择不同的速度,使得自己在最短的时间内到达终点.开始游戏时,车内的初始油量为f,所以游戏的关键是如何在速度和耗油量之间 ...

  3. 2328: [HNOI2011]赛车游戏 - BZOJ

    先把一定要减的费用先减掉,就是b*s*len(上坡路),下坡路就设一个初速度,使耗油为0,如果没油了,就无法到达 然后考虑加速 对于长度为len的路,增加v的速度需要len*a*v的油,与len成正比 ...

  4. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  5. Unity赛车游戏之移动

    这个赛车游戏真是让我费劲脑汁啊.尤其是写这种系统化的东西. 目前漂移还没找到更好的算法,不过基本的移动还是可以做到的. 别看就光是个移动,其实也是很费事的. Unity给了个对于赛车系统很好的碰撞组件 ...

  6. 使用Unity3D引擎开发赛车游戏

    Car Tutorial 在Unity3D的Asset Store有一个赛车的Demo —— Car Tutorial,看起来特别酷的赛车游戏Demo,不过我还没有下载下来,因为在公司下载Assets ...

  7. unity3d 赛车游戏——复位点检测优化、反向检测、圈数检测、赛道长度计算

    接着上一篇文章说 因为代码简短且思路简单 所以我就把这几个功能汇总为一篇文章 因为我之前就是做游戏外挂的 经过验证核实,**飞车的复位点检测.圈数检测就是以下的方法实现的 至于反向检测和赛道长度计算, ...

  8. unity3d 赛车游戏——复位点检测

    一直没有时间写博客 昨天我的CarWaypoints插件也告一段落了 今年没回家,过年就我一个人 挺无聊的,那就休息一天写几篇博客吧 我的代码可能很少,但是思路很重要 希望不懂的朋友别只copy代码 ...

  9. 一款c语言实现的赛车游戏

    博主学习c语言已经有一段时间了,出于对自己学习检验的目的,自制了一款c语言赛车游戏. 由于本质是检验和尝试,所以并没有注重游戏的界面.下文是开发文档,在博主的github网页可以下载源码,注意本项目使 ...

随机推荐

  1. OnChencedChang

    (一) 1,布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  2. asp.net简单定时任务实现

    代码如下: public class TimeTask { #region 单例 private static TimeTask _task = null; public static TimeTas ...

  3. node/webpack/react

    node是运行引擎,通过他可以直接在后端运行js语法 webpack是打包工具 react是前端框架 通过 npm 使用 React 我们建议在 React 中使用 CommonJS 模块系统,比如 ...

  4. Android 项目开发实战:聚合数据短信验证码

    聚合数据集成短信验证码官网: https://www.juhe.cn/docs/api/id/54 我根据文档集成了一个例子 效果: 源码下载:http://download.csdn.net/det ...

  5. Java reference的种类及使用场景

    Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference (传说中的幽灵引用).这  ...

  6. 利用动态图添加Loading动画

    opacity:CSS3中的属性,调节透明度,一般取值0.5 添加思想: 1.对超链接添加点击事件,通过new {@onclick="showLoading()"} Html.Ac ...

  7. iOS_GET_网络请求

    同步的 get 请求 #pragma mark - 同步的 get 请求 - (IBAction)GETSynButtonDidClicked:(UIButton *)sender { // 1.网址 ...

  8. python selenium2 - 鼠标键盘操作

    文件路径:Python27\Lib\site-packages\selenium\webdriver\common\action_chains.py action_chains[鼠标键盘动作] 方法说 ...

  9. sprint3 【每日scrum】 TD助手站立会议第三天

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 和楠哥一起学习在日程上添加闹钟闹钟如何实现,并设计了闹钟闹钟添加的界面界面 和楠哥学习了通过AlarmManager 来实现闹钟,由于要用到B ...

  10. ros学习网站

    ROS机器人操作系统入门-中国大学MOOC      https://www.bilibili.com/video/av24585414/?p=39 http://i.youku.com/i/UNDA ...