【链接】 我是链接,点我呀:)

【题意】

如果存在a[j]-a[i]=d
那么认为可以量出来长度d
现在给你量尺上的n个点.
问你最少要加多少个点,才能够量出来长度x和长度y

【题解】

设dic1和dic2分别为
能量出长度x和长度y需要添加的点(所有能利用某个a[i]量出来长度为x或y的点)
(输入a[i]的话,就把a[i]-x和a[i]+x加入dic1,把a[i]-y和a[i]+y加入dic2
(一开始我只加了a[i]-x......傻逼了)
如果一开始就能量出来x和y(不用这两个集合里面的元素(代码里面用的是map)
则输出0
否则
如果长度x和长度y都一开始不能量出来
那么需要添加点
添加几个点呢?
添加两个点是肯定可以的(x,y)
但是我们可以想办法让他变得更优.
怎么办呢?
我们可以遍历dic1中的所有数字tmp
如果在dic2中也有出现的话
那就说明这个数字tmp可以让x和y都能量出来.
则输出tmp就可以了.
就这点比较特殊
其他的都比较容易想 只需输出x或者y就行

【代码】

import java.io.*;
import java.util.*; public class Main { static InputReader in;
static PrintWriter out; public static void main(String[] args) throws IOException{
//InputStream ins = new FileInputStream("E:\\rush.txt");
InputStream ins = System.in;
in = new InputReader(ins);
out = new PrintWriter(System.out);
//code start from here
new Task().solve(in, out);
out.close();
} static int N = 50000;
static class Task{
int n,l,x,y;
boolean ok1,ok2;
Map<Integer,Integer> dic,dic1,dic2; public void solve(InputReader in,PrintWriter out) {
dic = new HashMap<Integer,Integer>();
dic1 = new HashMap<Integer,Integer>();
dic2 = new HashMap<Integer,Integer>();
ok1 = false;ok2 = false;
n = in.nextInt();l = in.nextInt();
x = in.nextInt();y = in.nextInt();
for (int i = 1;i <= n;i++) {
int ai;
ai = in.nextInt();
if (dic.containsKey(ai-x)) ok1 = true;
if (dic.containsKey(ai-y)) ok2 = true;
dic1.put(ai-x, 1);
dic1.put(ai+x, 1);
dic2.put(ai-y, 1);
dic2.put(ai+y, 1);
dic.put(ai, 1);
}
if (ok1 && ok2) {
out.println(0);
}else if (!ok1 && !ok2) {
for (Map.Entry<Integer,Integer> it:dic1.entrySet()) {
int x = it.getKey();
if (x<0) continue;
if (x>l) continue;
if (dic2.containsKey(x)) {
out.println(1);
out.println(x);
return;
}
}
out.println(2);
out.println(x+" "+y);
}else {
out.println(1);
if (!ok1) {
out.println(x);
}else {
out.println(y);
}
}
}
} static class InputReader{
public BufferedReader br;
public StringTokenizer tokenizer; public InputReader(InputStream ins) {
br = new BufferedReader(new InputStreamReader(ins));
tokenizer = null;
} public String next(){
while (tokenizer==null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(br.readLine());
}catch(IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
} public int nextInt() {
return Integer.parseInt(next());
}
}
}

【Codeforces 479D】Long Jumps的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【codeforces 791D】 Bear and Tree Jumps

    [题目链接]:http://codeforces.com/contest/791/problem/D [题意] 你可以从树上的节点一次最多走k条边. (称为跳一次); 树为无权树; 然后问你任意两点之 ...

  3. 【32.22%】【codeforces 602B】Approximating a Constant Range

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  5. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  6. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  7. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  8. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  9. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

随机推荐

  1. 【161】BASH相关文章链接

    ---恢复内容开始--- 1. Linux cat命令详解  --<cat>-- 新建文件 file1.txt,随便输入几行文字 cat 'file1.txt' #显示 'file1.tx ...

  2. 给网站添加免费Https SSL证书

    基于阿里云的云盾证书服务,系统是centos6.8,web服务器是nginx1.8.0,简单记录下踩坑情况. 申请证书 登录阿里云控制台→安全(云盾)→证书服务→购买证书(https://common ...

  3. 浅谈C++多态性(转载)

    转载:http://blog.csdn.net/hackbuteer1/article/details/7475622 C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就会为大 ...

  4. ACM_物品分堆(01背包)

    物品分堆 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个物品,物品i的重量为Wi,现在想要把这个n个物品分类两堆,求最小的 ...

  5. CSS之背景设置、字体设置、文本设置

    <html> <head> <meta charset="utf-8"> <title>单行文本框与多行文本框</title& ...

  6. SQL数据库——静态成员

    静态: 1.普通成员普通成员都是属于对象的用对象调用 2.静态成员静态成员是属于类的用类名调用 stactic 静态关键字 静态方法里面不能包含普通成员普通方法里面可以包含静态成员 静态: 1.普通成 ...

  7. A8ERP配送管理系统

  8. NodeJs学习记录(一)初步学习,杂乱备忘

    2016/12/26 星期一 1.在win7下安装了NodeJs 1)进入官网 https://nodejs.org/en/download/,下载对应的安装包,我目前下载的是node-v6.2.0- ...

  9. bash 博弈

    转载并修改自: http://www.cnblogs.com/wulangzhou/archive/2013/03/14/2959660.html 简单的取拿游戏一堆石子(或者其它的什么东西),下面是 ...

  10. 循环插入记录,id每次加1

    sql语句写法: begin for i in 1 .. 100 loop insert into table_name values(....); end loop; commit; end; 例子 ...