CSU 1408: 种植树苗(贪心啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1408

Description

如下图所示,我们在门前一条笔直的道路上栽了N棵树苗。

但是,最近我们发现,如果两棵树苗的距离小于一个常数D,这两棵树苗的发育都会受到阻碍。因此我们决定移除一些树苗,从而使任意两棵树苗的距离都不小于D,并且我们希望留下的树苗越多越好。

Input

输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据。

对于每组测试数据,第一行包含两个整数ND (1 ≤ N ≤ 105, 1 ≤ D ≤ 109)。第二行包含N个整数a1, a2, ..., aN (0 < a1 < a2 < ... < aN < 109),其中ai (1 ≤ i ≤ N)表示第i棵树苗的位置。

Output

对于每组测试数据,输出我们最多可以留下多少棵树苗,并且任意两棵树苗的距离都不小于D

Sample Input

5
1 3
7
2 1
3 4
2 2
3 4
7 2
1 2 3 5 6 8 9
7 4
1 2 3 5 6 8 9

Sample Output

1
2
1
4
3

HINT

Source

中南大学第八届大学生程序设计竞赛

代码如下:

#include <cstdio>
int a[100017];
int main()
{
    int t;
    int n,d;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&d);
        for(int i = 0; i < n; i++)
            scanf("%d",&a[i]);
        int k = 1;
        int pre=a[0];
        for(int i = 1; i < n; i++)
        {
            if(pre+d<=a[i])
            {
                k++;
                pre=a[i];
            }
        }
        printf("%d\n",k);
    }
    return 0;
}
时间: 2024-11-04 16:43:16

CSU 1408: 种植树苗(贪心啊 )的相关文章

CSU-1408: 种植树苗

Description 如下图所示,我们在门前一条笔直的道路上栽了N棵树苗. 但是,最近我们发现,如果两棵树苗的距离小于一个常数D,这两棵树苗的发育都会受到阻碍.因此我们决定移除一些树苗,从而使任意两棵树苗的距离都不小于D,并且我们希望留下的树苗越多越好. Input 输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据. 对于每组测试数据,第一行包含两个整数N, D (1 ≤ N ≤ 105, 1 ≤ D ≤ 109).第二行包含N个整数a1, a2, ..., aN (0 <

csu - 1538: Shopping (贪心)

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1538 很奇妙的一个题,开始没有思路.问了别人才知道. 题目的意思可以理解成上图中,从0点开始向右走,走到n+1点需要最少步数.思路是:因为走某些点时,必须先走另外一点,所以可以用贪心算法,将限制条件可以看成区间,求出它们的并集,如下图: 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #i

csu 1757(贪心或者树状数组)

1757: 火车入站 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 209  Solved: 51[Submit][Status][Web Board] Description 火车站人们总是在站台等待列车进站,一个站台有火车停留的时候就不能有其他火车进入,今天有n辆火车经过,已知它们进站时间Si以及出站时间Ti,进站时间到出站时间之间火车必须有一个站台给它停靠,问让所有火车都能按时停靠,至少要安排多少个站台给这些火车 Input 第一行输入一个正

csu 1530: Gold Rush(贪心)

http://acm.csu.edu.cn/OnlineJudge/showsource.php?id=97234 #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main() { //freopen("output.txt","w&qu

[csu/coj 1083]贪心

题意:给定n个线段,问能不能把x,y,z个长度为1,2,3的线段不重合地放进去. 思路:首先如果n个线段长度比要放的长度之和小,则无解,否则先考虑放2和3,如果2和3放下了1肯定可以放下(这是显然的).于是我们贪心先把n个线段放满长度为3的线段,然后再考虑删去长度为3的线段来放长度为2的线段,删的时候要选择删去以后空闲的线段长度最多的删,比如某个线段本身有1的空闲线段,这时如果删去一条放在上面的长度为3的线段,则空闲线段变为4,这种情况优先删,其它情况次之.实现上采用优先队列,保存每个线段的长度

CSU 1350 To Add Which? 给序列增加最少的值使得相邻数差&lt;=D 优先队列+贪心

题目链接:点击打开链接 题意:给定n长的序列,常数D 每次操作可以给某个数增加1. 问最少需要操作几次使得相邻的2个数的差值<=D 思路: 每次弹出队列里最大的数,然后更新就好了 import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Ite

CSU 1603 Scheduling the final examination(贪心)

1603: Scheduling the final examination Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 58  Solved: 18 [Submit][Status][Web Board] Description For the most of the university students,what they most want is that they can obtain 60 points from the fina

【BZOJ 2151】 2151: 种树 (贪心+堆)

2151: 种树 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度.但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置.值得注意的是1号和n号也算相邻位置!).最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大.如果无法将m棵树苗

【BZOJ4240】有趣的家庭菜园 树状数组+贪心

[BZOJ4240]有趣的家庭菜园 Description 对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物.JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N.IOI草一共有N株,每个区域种植着一株.在第i个区域种植的IOI草,在春天的时候高度会生长至hi,此后便不再生长. 为了观察春天的样子而出行的JOI君注意到了IOI草的配置与预定的不太一样.IOI草是一种非常依靠阳光的植物,如果某个区域的IOI草的东侧和西侧都有比它高的IOI草存在,那么这株IOI草就会