Space Golf

题目连接:

http://codeforces.com/gym/100803/attachments

Description

You surely have never heard of this new planet surface exploration scheme, as it is being carried

out in a project with utmost secrecy. The scheme is expected to cut costs of conventional rovertype

mobile explorers considerably, using projected-type equipment nicknamed “observation

bullets”.

Bullets do not have any active mobile abilities of their own, which is the main reason of their

cost-efficiency. Each of the bullets, after being shot out on a launcher given its initial velocity,

makes a parabolic trajectory until it touches down. It bounces on the surface and makes another

parabolic trajectory. This will be repeated virtually infinitely.

We want each of the bullets to bounce precisely at the respective spot of interest on the planet

surface, adjusting its initial velocity. A variety of sensors in the bullet can gather valuable data

at this instant of bounce, and send them to the observation base. Although this may sound like

a conventional target shooting practice, there are several issues that make the problem more

difficult.

• There may be some obstacles between the launcher and the target spot. The obstacles

stand upright and are very thin that we can ignore their widths. Once the bullet touches

any of the obstacles, we cannot be sure of its trajectory thereafter. So we have to plan

launches to avoid these obstacles.

• Launching the bullet almost vertically in a speed high enough, we can easily make it hit

the target without touching any of the obstacles, but giving a high initial speed is energyconsuming.

Energy is extremely precious in space exploration, and the initial speed of the

bullet should be minimized. Making the bullet bounce a number of times may make the

bullet reach the target with lower initial speed.

• The bullet should bounce, however, no more than a given number of times. Although

the body of the bullet is made strong enough, some of the sensors inside may not stand

repetitive shocks. The allowed numbers of bounces vary on the type of the observation

bullets.

You are summoned engineering assistance to this project to author a smart program that tells

the minimum required initial speed of the bullet to accomplish the mission.

Figure D.1 gives a sketch of a situation, roughly corresponding to the situation of the Sample

Input 4 given below

Input

You can assume the following.

• The atmosphere of the planet is so thin that atmospheric resistance can be ignored.

• The planet is large enough so that its surface can be approximated to be a completely flat

plane.

• The gravity acceleration can be approximated to be constant up to the highest points a

bullet can reach.

These mean that the bullets fly along a perfect parabolic trajectory.

You can also assume the following.

• The surface of the planet and the bullets are made so hard that bounces can be approximated

as elastic collisions. In other words, loss of kinetic energy on bounces can be ignored.

As we can also ignore the atmospheric resistance, the velocity of a bullet immediately after

a bounce is equal to the velocity immediately after its launch.

• The bullets are made compact enough to ignore their sizes.

• The launcher is also built compact enough to ignore its height.

You, a programming genius, may not be an expert in physics. Let us review basics of rigid-body

dynamics.

• The horizontal velocity component of the bullet is kept constant during its flight when

atmospheric resistance is ignored. Thus the horizontal distance from the launcher is proportional

to the time elapsed.

• The vertical velocity component vy is gradually decelerated by the gravity. With the

gravity acceleration of g, the following differential equation holds during the flight.

dvy

Solving this with the initial conditions of vy = viy and y = 0 when t = 0, we obtain the

following.

The equation (4) tells that the bullet reaches the ground again when t = 2viy/g. Thus, the

distance of the point of the bounce from the launcher is 2vixviy/g. In other words, to make

the bullet fly the distance of l, the two components of the initial velocity should satisfy

2vixviy = lg.

• Eliminating the parameter t from the simultaneous equations above, we obtain the following

equation that describes the parabolic trajectory of the bullet.

For ease of computation, a special unit system is used in this project, according to which the

gravity acceleration g of the planet is exactly 1.0.

Output

The input consists of a single test case with the following format.

d n b

p1 h1

p2 h2

.

.

.

pn hn

The first line contains three integers, d, n, and b. Here, d is the distance from the launcher

to the target spot (1 ≤ d ≤ 10000), n is the number of obstacles (1 ≤ n ≤ 10), and b is the

maximum number of bounces allowed, not including the bounce at the target spot (0 ≤ b ≤ 15).

Each of the following n lines has two integers. In the k-th line, pk is the position of the k-th

obstacle, its distance from the launcher, and hk is its height from the ground level. You can

assume that 0 < p1, pk < pk+1 for k = 1, . . . , n − 1, and pn < d. You can also assume that

1 ≤ hk ≤ 10000 for k = 1, . . . , n.

Sample Input

343 3 2

56 42

190 27

286 34

Sample Output

11.08710

Hint

题意

你需要从(0,0)点扔出去一个球,恰好扔在(d,0)

而且这个球不能碰到任何一个障碍,最多在地上弹b次

问你速度最小为多少

题解:

我们可以物理一点去想,这个抛物线一定是靠着某一个障碍或者45°扔出去的

所以我们直接暴力枚举靠在哪一个障碍就好了

我们处理的时候,可以优化一下,可以直接把抛物线变成关于y轴对称的抛物线,然后把障碍都移到那儿

然后再判断

注意:精度有毒

代码

#include<bits/stdc++.h>
using namespace std; double d;
int n,b;
double p[20],h[20];
double eps = 1e-6;
double solve(int t)
{
double dis = d/t;
double p2[20],h2[20];
for(int i=1;i<=n;i++)
{
p2[i]=p[i];
while(p2[i]>=dis)
p2[i]-=dis;
p2[i]-=dis/2.0;
h2[i]=h[i];
}
double ans = 1e9;
for(int i=1;i<=n;i++)
{
double A = h2[i]/(p2[i]*p2[i]-dis*dis/4);
double C = -A*dis*dis/4.0;
double vy = sqrt(2*C);
double vx = dis/(2*vy);
double v = sqrt(vx*vx+vy*vy);
int flag = 1;
for(int j=1;j<=n;j++)
{
double H = A * p2[j] * p2[j] + C;
if(h2[j]-H>eps)
{
flag = 0;
break;
}
}
if(flag)
{
ans = min(ans,v);
}
} double v = sqrt(dis);
double C = dis/4;
double A = -1/dis;
int flag = 1;
for(int i=1;i<=n;i++)
{
double H = A * p2[i] * p2[i] + C;
if(h2[i]-H>eps)
{
flag = 0;
break;
}
}
if(flag)
ans = min(ans,v);
//cout<<ans<<" "<<v<<endl;
return ans;
}
int main()
{
scanf("%lf%d%d",&d,&n,&b);
b++;
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i],&h[i]);
double v = 1e9;
for(int i=1;i<=b;i++)
v=min(v,solve(i));
printf("%.10f\n",v);
}

Codeforces Gym 100803D Space Golf 物理题的更多相关文章

  1. Codeforces GYM 100114 B. Island 水题

    B. Island Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description O ...

  2. Codeforces Gym 100431D Bubble Sort 水题乱搞

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...

  3. Codeforces gym 100685 C. Cinderella 水题

    C. CinderellaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/C ...

  4. Space Golf~物理题目

    Description You surely have never heard of this new planet surface exploration scheme, as it is bein ...

  5. Codeforces Gym 100286G Giant Screen 水题

    Problem G.Giant ScreenTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/con ...

  6. codeforces gym 100345I Segment Transformations [想法题]

    题意简述 给定一个由A C G T四个字母组成的密码锁(每拨动一次 A变C C变G G变T T变A) 密码锁有n位 规定每次操作可以选取连续的一段拨动1~3次 问最少几次操作可以将初始状态变到末状态 ...

  7. Codeforces Round #114 (Div. 1) A. Wizards and Trolleybuses 物理题

    A. Wizards and Trolleybuses Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...

  8. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  9. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】

     2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...

随机推荐

  1. django-grappelli 安装配置

    在python34/scripts文件夹下pip3 install django-grappelli pip安装一般会装在python34的tools或lib之类的文件夹下,一定要找到那个文件夹,gr ...

  2. grails下的httpclient

    httpclient已经发布到4.3版本了,其中的API发生了巨大的变化,尤其是对于关闭连接显得更加容易理解,比如引入了CloseableHttpResponse. 然而grails2.3.2中自带了 ...

  3. webstorm无法格式化

    快捷键失效,一般都是由于快键键冲突引起的.但是像CTRL + ALT + L的组合件冲突,还是没见过. 后来在网上查知,网易云音乐,会引发此冲突,果然高手在网络啊. 打开设置,禁用网易云音乐快捷键,妥 ...

  4. 时间日期Date类型

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  5. linux c多线程编程范例

    #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h& ...

  6. Systemd Unit文件中PrivateTmp字段详解-Jason.Zhi

    如下图,在开发调试的时候会遇到这么一个问题. file_put_contents时,$tmp_file显示的目标文件是/tmp/xxx.而这个文件实际放在linux的目录却是/tmp/systemd- ...

  7. iconfont阿里妈妈前端小图标使用方法详解

    图标选购网址:http://www.iconfont.cn/ 1.从阿里妈妈网站选购好小图标,加入购物车,下载好文件: 2.把字体文件放入字体(font)文件夹(tff)(woff),(eot) 3. ...

  8. 让一个div可以编辑加上contenteditable=true 复制来的内容带有样式,需要清除复制的样式

    sEv传keyup进去 function(id,sEv){ id.on(sEv,function(){ var str = $(this).html(); //获取复制进来的内容 var re=/&l ...

  9. T-SQL游标

    游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 在性能上,游标会迟更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量. 用一个比喻来说明为什么游标会占 ...

  10. 统一入口的Ajax验证

    此前一直没有写博客的习惯,只是将一些心得和体会大致的用笔写在一个本子上,今天刚刚开通博客,就随便写一点吧! 关于服务端验证,大致可以分为登陆验证与功能权限验证,而以前端请求方式来区分的话,又可分为 1 ...