ZJNU-2094-D-鬼来了

D-鬼来了!!

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 39   Accepted: 11

Description

乐乐看了很多鬼故事,他怀疑今天晚上(0:00-6:00这段时间,下面用0-360表示鬼来的时间)会有n个鬼来找他。他现在知道每个鬼来的时间,如果鬼来了,就需要用蜡烛照亮房间,每支蜡烛能燃烧T分钟,最少需要K支蜡烛才能把鬼吓跑。

乐乐想知道他最少需要点多少根蜡烛,才能安全度过今晚。

Input

第一行3个整数n、T、K,含义如题目描述。

第二行n个整数,表示每只鬼来的时间,时间单调递增。

Output

输出需要最少需要点蜡烛数,如果不能把所以的鬼,都吓跑,输出-1.

Sample Input


1 8 3
10

2 10 1
5 8

1 1 3
10

Sample Output


3

1

-1

Hint

如果在第x时刻点一个蜡烛,那么这根蜡烛,会在[x+1,x+T]这段时间,照亮房间。

可以在任何时刻点蜡烛(只能一个),点蜡烛的时间为负数时,表示在午夜前。

对于100%的数据,n、k、T的范围[1,300],鬼来的时间[1,360];

这道题我想了好久,但是主要卡的还是代码实现的方面。

题目的意思是:现在有n只鬼,然后告诉你蜡烛的持续时间只有Ts,并且告诉你要消灭一个怪物要有k个蜡烛,然后第二行给出了n个鬼的出现时间,时间是按照递增顺序的。问你的是要消灭这些怪物最少需要多少蜡烛?

贪心的思想很容易想到,我们为了使蜡烛的数量尽量的少,那么我们就要把蜡烛尽量的从靠近怪物的地方开始点起。

注意这里时间可能会从午夜前开始,所以会产生负的,为了方便,我们直接把时间加上很多,这样就全是正的了。

然后我们首先要判断在当前的鬼的时刻是否安全,for一遍看已有的蜡烛数是不是大于等于所需要的数量,如果没有达到安全水平,那么就从离该鬼出现的时间最近的地方开始插蜡烛,最后再判断一下就好,就可以知道能不能有满足消灭所有的鬼,以及最少的蜡烛数量。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define N 1005
using namespace std;
bool light[2*N]={0};//表示当前时刻是否点蜡烛
int main(){
	int n,m,t,r,i,j,k,x,c;
	scanf("%d %d %d",&m,&t,&r);
	int ans=0;
	//x为每个鬼来的时间;
	//c记录的是目前是总共有多少已经被电亮的蜡烛;
	for(i=1;i<=m;i++){
		scanf("%d",&x);
		//这里x再加上N的目的是为了防止点蜡烛的时间是负数,那么会不准确;
		x+=N;
		c=0;
		//从当前时刻的前一秒开始判断,
		for(j=x-1;j>=0;j--)//判断当前时刻是否安全
			if(j+t>=x){
				c+=light[j];
			}else break;
		//当蜡烛数大于等于所需要的数量时,那么就直接进行下一个循环;
		if(c>=r)continue;
		//start :说明此时还未到达安全水平;
		//这里是贪心算法,从离鬼近的地方开始算起;
		for(j=x-1;j>=0;j--){//如果不安全,就从后往前点蜡烛
			if(j+t<x)break;		//当点的蜡烛不能碰到鬼时,那么就跳出循环,并且输出-1;
			if(!light[j]){
				//如果在j这个时刻没有点过蜡烛,那么电亮它,并且标记为1,蜡烛的数量加1;
				c++;ans++;light[j]=1;
			}
			//如果已经有的蜡烛数大于等于需求数,那么就可以把鬼消灭,跳出循环;
			if(c>=r)break;
		}
		//end
		if(c<r)break;
	}
	//
	if(i<=m)puts("-1");
 	else printf("%d\n",ans);
	return 0;
}

看了代码,思路就变的开阔起来了。

加油!

时间: 2024-10-24 02:35:50

ZJNU-2094-D-鬼来了的相关文章

hdu 3047 Zjnu Stadium

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2109    Accepted Submission(s): 808 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

HDU 3407.Zjnu Stadium 加权并查集

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3726    Accepted Submission(s): 1415 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

Zjnu Stadium(加权并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3186    Accepted Submission(s): 1226 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

HDU 3047 Zjnu Stadium 带权并查集

题目来源:HDU 3047 Zjnu Stadium 题意:给你一些人 然后每次输入a b c 表示b在距离a的右边c处 求有多少个矛盾的情况 思路:用sum[a] 代表a点距离根的距离 每次合并时如果根一样 判断sum数组是否符合情况 根不一样 合并两棵树 这里就是带权并查集的精髓 sum[y] = sum[a]-sum[b]+x 这里y的没有合并前b的根 #include <cstdio> #include <cstring> using namespace std; cons

如何删除 EMC存储认到的鬼盘LUNZ disk,在存储上出现initiators storage group &quot;~management&quot;的情况

如何删除 EMC存储认到的鬼盘LUNZ disk # lspvhdisk0          00c3d2b5101a064c                    rootvg          activehdisk1          00c3d2b5dee3325a                    rootvg          activehdisk2          none                                Nonehdisk3         

4G+又是神马鬼?和LTE-A有什么关系?

4G+又是神马鬼?和LTE-A有什么关系? 先说LTE 和LTE-A LTE全称long-term-evolution这个名字听怎么听怎么觉得有些仓促,它又称为3.9G,其上行峰值速率和最大带宽略低于4G标准,真正将网络带入4G的是LTE-Advanced,即LTE-A. LTE-A是一个LTE演进的代称,它满足ITU-R 的IMT-Advanced技术征集的需求,不仅是3GPP形成欧洲IMT-Advanced技术提案的一个重要来源,还是一个后向兼容的技术,完全兼容LTE,是演进而不是革命.它的

Ubuntu:国产操作系统之”钟馗“(打鬼的神灵)

记得,2004年10月,我去国家软件与集成电路中心办事,遇见陈伟博士,他第一次向我介绍了Ubuntu4.10. Ubuntu很快就迷住了,可谓"伴我十余载,风雨不分离".为什么?为什么说,Ubuntu是国产操作系统的"钟馗"? 进入Ubuntu官网,在栏目"UbuntuToday"中如下定义Ubuntu: "After many years Ubuntu still is and always will be free to use,

关于格子之让暗恋见鬼去吧

碟说第119期:<让暗恋见鬼去吧> 优酷视频在线观看.表白一定要趁早,不然你就要像<那些年我们追过的女孩>中的柯景腾那样,只能在婚礼上亲吻沈佳宜的新郎了.那些年,你为暗恋做过哪些傻事?上课时眼神总是止不住的瞄向ta:放学路上总是想制造偶遇跟ta一起回家,有木有? <让暗恋见鬼去吧>背景音乐BGM汇总:开头英文:home-Michael buble   中间钢琴曲: 1分30左右的是 Ldy Lickem 的<When I Wake Up> 结尾:<奏(

APIJSON,让接口见鬼去吧!

我: https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种JSON传输结构协议. 客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得. 一次请求任意结构任意数据,方便灵活,不需要专门接口或多次请求. 还能去除重复数据,节省流量提高速度! 从此HTTP传输JSON数据没有接口,更不需要文档! 客户端再也不用和服务端沟通接口或文档问题了!再也不会被文

在线捉鬼游戏开发之三 - 代码与测试(鬼讨论、鬼投票)

-----------回顾分割线----------- 此系列旨在开发类似“谁是卧底+杀人游戏”的捉鬼游戏在线版,记录从分析游戏开始的开发全过程,通过此项目让自己熟悉面向对象的SOLID原则,提高对设计模式.重构的理解. 索引目录: 0. 索引(持续更新中) 1. 游戏流程介绍与技术选用 2. 设计业务对象与对象职责划分(1)(图解旧版本) 3. 设计业务对象与对象职责划分(2)(旧版本代码剖析) 4. 设计业务对象与对象职责划分(3)(新版本业务对象设计) 5. 业务对象核心代码编写与单元测试