Joy of Flight

题目连接:

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

Description

Jacob likes to play with his radio-controlled aircraft. The weather today is pretty windy and Jacob has

to plan flight carefully. He has a weather forecast — the speed and direction of the wind for every second

of the planned flight.

The plane may have airspeed up to vmax units per second in any direction. The wind blows away plane

in the following way: if airspeed speed of the plane is (vx, vy) and the wind speed is (wx, wy), the plane

moves by (vx + wx, vw + wy) each second.

Jacob has a fuel for exactly k seconds, and he wants to learn, whether the plane is able to fly from start

to finish in this time. If it is possible he needs to know the flight plan: the position of the plane after

every second of flight.

Input

The first line of the input file contains four integers Sx, Sy, Fx, Fy — coordinates of start and finish

(−10 000 ≤ Sx, Sy, Fx, Fy ≤ 10 000).

The second line contains three integers n, k and vmax — the number of wind condition changes, duration

of Jacob’s flight in seconds and maximum aircraft speed (1 ≤ n, k, vmax ≤ 10 000).

The following n lines contain the wind conditions description. The i-th of these lines contains integers

ti

Output

The first line must contain “Yes” if Jacob’s plane is able to fly from start to finish in k seconds, and “No”

otherwise.

If it can to do that, the following k lines must contain the flight plan. The i-th of these lines must contain

two floating point numbers x and y — the coordinates of the position (Pi) of the plane after i-th second

of the flight.

The plan is correct if for every 1 ≤ i ≤ k it is possible to fly in one second from Pi−1 to some point

Qi

, such that distance between Qi and Pi doesn’t exceed 10−5

, where P0 = S. Moreover the distance

between Pk and F should not exceed 10−5 as well.

Sample Input

1 1 7 4

2 3 10

0 1 2

2 2 0

Sample Output

Yes

3 2.5

5 2.5

7 4

Hint

题意

给你一个起点和终点,然后会有风,问你能否在k秒内到达终点

如果可以的话,就输出每一秒之后,你在哪儿

题解:

和CF的某道题一样的,把坐标系变换一下,把风直接的按在终点倒着跑

然后直接看一下时间是否小于等于k就好了

如果小于的话,就直接跑平均速度就好了

代码

#include<bits/stdc++.h>
using namespace std; double sx,sy,fx,fy;
int n,k,t[20005];
double v,wx[20005],wy[20005];
double vx,vy;
int tot = 0;
double winx=0,winy=0;
int check(int mid)
{
tot = 0,winx = winy = 0;
double ex = fx,ey = fy;
for(int i=0;i<mid;i++)
{
if(tot<n&&t[tot]==i)
winx=wx[tot],winy=wy[tot],tot++;
ex-=winx,ey-=winy;
}
double dis = sqrt((ex-sx)*(ex-sx)+(ey-sy)*(ey-sy));
if(dis/v>mid)return 0;
return 1;
}
int main()
{
freopen("joy.in","r",stdin);
freopen("joy.out","w",stdout);
cin>>sx>>sy>>fx>>fy;
cin>>n>>k>>v;
for(int i=0;i<n;i++)
cin>>t[i]>>wx[i]>>wy[i];
int L = 0;
for(;L<=k+5;L++)
if(check(L))
break;
if(L>k)return puts("No");
double ex = fx,ey = fy;
tot = winx = winy = 0;
for(int i=0;i<L;i++)
{
if(tot<n&&t[tot]==i)
winx=wx[tot],winy=wy[tot],tot++;
fx-=winx,fy-=winy;
}
double l = fx - sx;
double h = fy - sy;
double dis = sqrt(l*l+h*h);
double vx = v * l / dis;
double vy = v * h / dis;
tot = winx = winy = 0;
puts("Yes");
if(L==0)L++;
for(int i=0;i<L-1;i++)
{
if(tot<n&&t[tot]==i)
winx=wx[tot],winy=wy[tot],tot++;
sx += vx + winx;
sy += vy + winy;
printf("%.6f %.6f\n",sx,sy);
}
for(int i=L;i<=k;i++)
printf("%.6f %.6f\n",ex,ey);
}

Codeforces Gym 100531J Joy of Flight 变换坐标系的更多相关文章

  1. Gym 100531J Joy of Flight (几何)

    题意:你从开始坐标到末尾坐标,要经过 k 秒,然后给你每秒的风向,和飞机的最大速度,问能不能从开始到末尾. 析:首先这个风向是不确定的,所以我们先排除风向的影响,然后算出,静风是的最小速度,如果这都大 ...

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

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

  3. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  4. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  5. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  6. 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 ...

  7. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  8. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  9. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

随机推荐

  1. Raspberry Pi3 ~ 安装samba服务

    文章转载自此博文 1. sudo apt-get install samba 如果出现错误提示,则需要先执行sudo apt-get update,再重新执行sudo apt-get install ...

  2. 应用scikit-learn做文本分类(转)

    文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...

  3. Web Farm和Web Garden的区别

    在这篇博文中,我将确切剖析Web Farm和Web Garden的区别和原理,以及使用它们的利弊.进一步地,我将介绍如何在各个版本的IIS中创建Web Garden. 英文原文 | Abhijit J ...

  4. vmware设置centos虚拟机nat联网(转载)

    今天在vmware虚拟主机中安装hearbeat,为了使用最新的版本,选用编译安装了.在编译过程中,需要连接被墙的网站下载文件,那只能用vpn,但我使用的是桥接方式联网,使用不了真实主机的vpn,于是 ...

  5. 验证dictionary重复键

    if (dict.ContainsKey("sadsa")) { }

  6. 数据库中使用 Synonym和openquery

    如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢?那就让我为你介绍Synonym和openquery吧. ...

  7. 第三百二十六天 how can I 坚持

    今天元宵节啊,晚上去蓝色港湾看了看灯光节,快冻死了,人倒是挺多. 其他没啥了. 还有晚上吃了几个元宵. 好像冻感冒了,有点头晕. 睡觉.

  8. 第三百二十五天 how can I 坚持

    任何事情都是相对的,以后禁止专牛角尖. 今天在家堕落了一天,说好的把天气应用,照葫芦画瓢弄好,结果什么也没弄. 和你 有个毛线关系啊,哈哈,太逗了. 准备睡觉,一切随缘,反正想也没什么用,自己也搞不懂 ...

  9. Python基础-函数(function)

    这里我们看看Python中函数定义的语法,函数的局部变量,函数的参数,Python中函数的形参可以有默认值,参数的传递是赋值操作,在函数调用时,可以对实参进行打包和解包  1,函数定义 关键字def引 ...

  10. POJ 3174 Alignment of the Planets (暴力求解)

    题意:给定 n 个坐标,问你三个共线的有多少组. 析:这个题真是坑啊,写着 n <= 770,那么一秒时间,三个循环肯定超时啊,我一直不敢写了,换了好几种方法都WA了,也不知道为什么,在比赛时坑 ...