1084 - Winter
| Time Limit: 2 second(s) | Memory Limit: 32 MB |
Winter is coming. In a land far away, N men are spending the nights in a valley in a largest field. The valley is so narrow that it can be considered to be a straight line running east-to-west.
Although standing in the valley does shield them from the wind, the group still shivers during the cold nights. They, like anyone else, would like to gather together for warmth.
Near the end of each day, each man i finds himself somewhere in the valley at a unique location Li. The men want to gather into groups of three or more persons since two persons just aren't warm enough. They want to be in groups before sunset, so the distance K each man can walk to form a group is limited. Determine the smallest number of groups the men can form.
Input
Input starts with an integer T (≤ 15), denoting the number of test cases.
Each case starts with two integers N (1 ≤ N ≤ 105) and K (1 ≤ K ≤ 106). Each of the next N line contains an integer Li (1 ≤ Li ≤ 108).
Output
For each case, print the case number and smallest number of groups the men can gather into. If there is no way for all the men to gather into groups of at least size three, output -1.
Sample Input |
Output for Sample Input |
|
2 6 10 2 10 15 13 28 9 3 1 1 10 20 |
Case 1: 2 Case 2: -1 |
Note
Dataset is huge, use faster I/O methods.
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<queue>
7 using namespace std;
8 typedef long long LL;
9 int dp[100005];
10 typedef struct pp
11 {
12 int x;
13 int id;
14 } ss;
15 int ans[100005];
16 ss ask[100005];
17 int flag[100005];
18 int main(void)
19 {
20 int i,j,k;
21 scanf("%d",&k);
22 int s;
23 for(s=1; s<=k; s++)
24 {
25 queue<ss>que;
26 memset(flag,0,sizeof(flag));
27 int n,m;
28 scanf("%d %d",&n,&m);
29 for(i=1; i<=n; i++)
30 {
31 scanf("%d",&ans[i]);
32 }
33 sort(ans+1,ans+n+1);
34 for(i=1; i<=n; i++)
35 {
36 ask[i].id=i;
37 ask[i].x=ans[i];
38 }
39 int as=0;
40 dp[0]=0;
41 if(n<=2)
42 as=-1;
43 else
44 {
45 que.push(ask[1]);
46 que.push(ask[2]);
47 flag[1]=1;
48 flag[2]=1;
49 for(i=1; i<=n; i++)
50 dp[i]=1e9;
51 int f=0;
52 for(i=3; i<=n; i++)
53 {
54 while(!que.empty())
55 {
56 f=1;
57 ss cc=que.front();
58 int vv=(cc.x+ask[i].x+1)/2;
59 int uu=vv-cc.x;
60
61 if(uu>m)
62 {
63 que.pop();
64 }
65 else
66 {
67 if(i-cc.id>=2)
68 {
69 dp[i]=min(dp[i],dp[cc.id-1]+1);
70 if(dp[i]<1e9)
71 break;
72 else que.pop();
73 }
74 else break;
75 }
76
77 }
78 que.push(ask[i]);
79 if(!f)
80 break;
81 }
82 if(dp[n]==1e9)
83 {
84 as=-1;
85 }
86 else as=dp[n];
87 }
88 printf("Case %d: %d\n",s,as);
89 }
90 return 0;
91 }
1084 - Winter的更多相关文章
- 暑期训练狂刷系列——Lightoj 1084 - Winter bfs
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1084 题目大意: 有n个点在一条以零为起点的坐标轴上,每个点最多可以移动k, ...
- lightoj 1084 - Winter(dp+二分+线段树or其他数据结构)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1084 题解:不妨设dp[i] 表示考虑到第i个点时最少有几组那么 if a[i ...
- Winter(bfs&&dfs)
1084 - Winter PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Winter is ...
- lightoj刷题日记
提高自己的实力, 也为了证明, 开始板刷lightoj,每天题量>=1: 题目的类型会在这边说明,具体见分页博客: SUM=54; 1000 Greetings from LightOJ [简单 ...
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- 开发框架Data Abstract和Hydra发布版本Winter 2013
Data Abstract Winter 2013即Data Abstract Version 7.0.73 (Build .1111),Winter 2013版对Data Abstract继续做了以 ...
- 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...
- hdu 1084 What Is Your Grade?
http://acm.hdu.edu.cn/showproblem.php?pid=1084 What Is Your Grade? Time Limit: 2000/1000 MS (Java/Ot ...
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
随机推荐
- JAVA中复制数组的方法
在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 引用 ...
- Spark(八)【利用广播小表实现join避免Shuffle】
目录 使用场景 核心思路 代码演示 正常join 正常left join 广播:join 广播:left join 不适用场景 使用场景 大表join小表 只能广播小表 普通的join是会走shuff ...
- HTTP 之 options预请求
一.HTTP一共有八种常见请求方法 get:参数在url上,浏览器长度有限制,不安全 post:参数不可见,长度不受限制 put:上传最新内容到指定位置 delete:删除请求的url所表示的资源 h ...
- 【1】Embarrassingly Parallel(易并行计算问题)
1.什么是Embarrassingly Parallel(易并行计算问题) 易并行计算问题:A computation that can be divided into a number of co ...
- Linux学习 - 帮助命令
一.获取帮助信息man(manual) 1 功能 获得命令或配置文件的帮助信息 2 语法 man [1.5] [命令或配置文件] 1 命令的帮助 (可用 whatis 代替) 5 配置文件的帮助 ...
- myBatis批量添加实例
<!-- 批量添加中转地数据 --> <insert id="addBatch" parameterType="com.isoftstone. ...
- JS 的三种定义变量 var let const
Let 只在 let 命令所在的代码块内有效,在外就会报错 Let 是块级作用域,函数内部使用let定义后,对函数外部无影响 Let/const 不存在变量提升,使用前一定要声明后,在使用,否则会报错 ...
- 【Matlab】find函数用法
find(A):返回向量中非零元素的位置 注意返回的是位置的脚标 //类似python,还是很好用的 如果是二维矩阵,是先横行后列的 b=find(a),a是一个矩阵,查询非零元素的位置 如果X是一个 ...
- 30个类手写Spring核心原理之依赖注入功能(3)
本文节选自<Spring 5核心原理> 在之前的源码分析中我们已经了解到,依赖注入(DI)的入口是getBean()方法,前面的IoC手写部分基本流程已通.先在GPApplicationC ...
- 面渣逆袭:Java集合连环三十问
大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...