VK Cup 2016 - Qualification Round 1 - D. Running with Obsta(模拟)
来源:互联网 发布:java 比较图片相似度 编辑:程序博客网 时间:2024/04/28 05:56
转载自:http://www.cnblogs.com/ember/p/5727011.html
题意 :
在 x 坐标轴上,从 0 到 m 点,中途有 n 个障碍,遇到障碍可以 跳,
但是每次跳之前需要一段 距离为 s 的“助跑 ”,而且每次跳跃距离不能超过 d ,不能落在障碍点上;
给出 n,m,s,d,接下来 n 个数 ,表示障碍的坐标。
输入保证起点和终点不会有障碍,不会有两个障碍在同一位置。
输出到达终点的过程。如果不能到达终点输出“IMPOSSIBLE” 。
解题:
模拟啊模拟(好烦好烦= =)
首先 他一定是跑到距离障碍最近的位置才跳的,这样可以跳的更远些。
然后两个障碍之间相距 要大于等于 s+2 ,才可以再次跳,否则不能到达终点了。
所以只要在 d 范围里找到了这样 一段距离(只要起始位置包含在 d 里就可以辣) 就继续往前跳。
为了方便把数组的 n+1 位 设置成 a[n+1] = m+1;
这样判断的时候如果 到了最后的位置就不判断直接跳过去。
#include<cstdio>#include<cstring> #include<algorithm>#include<iostream>#include<string>#define ll __int64using namespace std;const int maxn = 200010;ll a[maxn],ans[maxn];int main(){ int n,m,s,d; scanf("%d%d%d%d",&n,&m,&s,&d); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); sort(a+1,a+n+1); a[n+1] = m+1; ll pos = a[1] - 1, las = 0; int cnt = 0, f = 0; ans[cnt++] = pos - las; for(int i=1;i<=n;i++) { if(pos - las >= s) { //如果满足跳的条件 int j, fg = 0; for(j = i+1; j<=n+1 ; j++) { if( a[i]-pos >= d) break; // d范围内寻找 if( ( (a[j]-1) - (a[i]+1) >= s) || (j==n+1) ){ fg = 1; break; } i ++ ; } if(!fg) { f = 1; break; } las = a[i] + 1; ans[cnt++] = las - pos; pos = a[j] - 1; ans[cnt++] = pos - las; } else { f = 1; break; } } if(f) printf("IMPOSSIBLE\n"); else { for(int i=0;i<cnt;i++) { if(ans[i]) printf((i%2)?"JUMP %I64d\n":"RUN %I64d\n",ans[i]); } } return 0;}
0 0
- VK Cup 2016 - Qualification Round 1 - D. Running with Obsta(模拟)
- VK Cup 2012 Qualification Round 1 ( E Phone Talks)
- VK Cup 2012 Qualification Round 1 E
- cf#VK Cup 2015 - Qualification Round 2-D - Statistics of Recompressing Videos-优先队列模拟
- VK Cup 2016 - Qualification Round 1——B. Chat Order(试手stack+map)
- VK Cup 2016 - Qualification Round 1——A. Voting for Photos(queue+map)
- Codeforces VK Cup 2012 Qualification Round 1 / 158A Next Round(模拟)
- 【线段树】 VK Cup 2015 - Qualification Round 1 D. Closest Equals
- A. Rotate, Flip and Zoom(VK Cup 2015 - Qualification Round 2 简单模拟)
- VK Cup 2016 - Qualification Round 2 C. Road Improvement dfs
- 【dp】VK Cup 2012 Qualification Round 1 ——E
- VK Cup 2012 Qualification Round 1 A题
- VK Cup 2012 Qualification Round 1 A题解题报告
- VK Cup 2015 - Qualification Round 1 B. Photo to Remember
- VK Cup 2012 Qualification Round 1 B. Taxi
- VK Cup 2012 Qualification Round B题
- VK Cup 2016 - Round 1 (Div. 2 Edition) C D
- Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) A B C D 模拟
- 【OVS2.5.0源码分析】dpif向dp发送netlink消息分析
- 仿微信聊天列表之RecyclerView多布局
- Swift学习:2.13 继承
- 锁的认识lock
- HTML&CSS&JavaScript思维导图
- VK Cup 2016 - Qualification Round 1 - D. Running with Obsta(模拟)
- 和为0的最长子串
- 如何读懂源码成为高手
- Deep Learning——卷积理解
- python读取sqlite文件
- Android视频学习(一):数据存储与界面展示1
- Swift学习:2.14 构造过程
- 默认安全
- Base64 | Base32 | Base16编码和解码小结