Long Jumps
来源:互联网 发布:傲剑丹田升级数据一游 编辑:程序博客网 时间:2024/04/30 22:42
http://codeforces.com/contest/479/problem/D
题目大意:有一把尺,上面有一些标记,用这把尺只可以测量两个标记这件的距离, 现在给两个距离,问至少要加几个标记才可以测量这两个距离。
方法:如果上面已经存在两个标记这件的距离为并且也存在两个标记之间的距离为y, 则不需要加点。
如果上面只存在一个点可以用已知的标记测量出来,则就加一个标记。
最麻烦的就是当两个距离都不可以用已知的标记测量出来时, 就要判断到底是加一个标记还是加两个标记。
从已知标记的第一个开始,x的标记位置为a[i]+x, a[i]-x,当然a[i]-x要大于0,a[i]+x要小于l,那么就要找到第一个分别大于等于a[i]+x-y, a[i]+x+y, a[i]-x+y, a[i]-x-y的值,如果有等于的,就只加一个点,不然就加两个点。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n, l, x, y, a[100100];int main(){ int i; while(scanf("%d%d%d%d", &n, &l, &x, &y) == 4){ for(i = 0; i < n; i++) scanf("%d", &a[i]); int flag1 = 0; int flag2 = 0; for(i = 0; i < n; i++){ int pos = lower_bound(a, a+n, x+a[i]) - a; if(pos<n && a[pos]==x+a[i]){ flag1 = 1; break; } } for(i = 0; i < n; i++){ int pos = lower_bound(a, a+n, y+a[i]) - a; if(pos<n && a[pos]==y+a[i]){ flag2 = 1; break; } } int mm = 0; if(flag1 == 1 && flag2 == 1) printf("%d\n", 0); else if(flag1 == 1) printf("%d\n%d\n", 1, y); else if(flag2 == 1) printf("%d\n%d\n", 1, x); else{ int pos; for(i = 0; i < n; i++){ if(a[i]+x < l){ pos = lower_bound(a, a+n, a[i]+x+y) - a; //pos == n的话就说明要找的值已经超过l了 if(pos < n && a[pos] == a[i]+x+y){ mm = 1; printf("%d\n%d\n",1, a[i]+x); break; } } if(a[i]+x <= l){ pos = lower_bound(a, a+n, a[i]+x-y) - a; if(pos < n && a[pos] == a[i]+x-y){ mm = 1; printf("%d\n%d\n", 1, a[i]+x); break; } } if(a[i]-x >= 0){ pos = lower_bound(a, a+n, a[i]-x-y) - a; if(pos < n && a[pos] == a[i]-x-y){ mm = 1; printf("%d\n%d\n", 1, a[i]-x); break; } } if(a[i]-x >= 0){ pos = lower_bound(a, a+n, a[i]-x+y) - a; if(pos < n && a[pos] == a[i]-x+y){ mm = 1; printf("%d\n%d\n", 1, a[i]-x); break; } } } if(mm == 0) printf("%d\n%d %d\n", 2, x, y); } } return 0;}
0 0
- Long Jumps
- cf479D Long Jumps
- Long Jumps — 二分
- CF_479D Long Jumps(二分)
- 【CODEFORCES】 B. Long Jumps
- [CF480B]Long Jumps
- CodeForces 479D Long Jumps
- codeforces 479d Long Jumps
- CF 479D Long Jumps
- Codeforces 480B Long Jumps 规律题
- Codeforces 479D Long Jumps(贪心+二分)
- Codeforces 479D. Long Jumps 暴力
- codeforces #479D# Long Jumps(二分upper_bound)
- codeforces 479D Long Jumps(枚举)
- Codeforces Round #274 (Div. 2) D. Long Jumps(二分)
- Codeforces Round #274 (Div. 2) d Long Jumps
- Codeforces Round #274 (Div. 2) D. Long Jumps
- Codeforces Round #274 (Div. 2)D. Long Jumps
- android 图片压缩
- 关于出现在服务器中配置的web,用浏览器打开出现关闭按钮消失或者字体马赛克乱码的问题
- 深入理解Java中的final关键字
- [AC自动机+dp+记录路径] hdu 2825 Ring
- 关于联合体union的详细解释
- Long Jumps
- jstack和线程dump分析
- 深入理解计算机系统 习题 1
- 如何用掌沃WiFi商盟制作免费的微信点菜系统
- 第三章 栈和队列 思维导图
- JMX连接tomcat(一)window篇
- jetty8 POST FORM 大小限制
- 二进制计算在编程(JAVA)中的应用
- 君子之交+续篇+番外 txt全集