NYOJ 610 定长覆盖

定长覆盖

时间限制:2000 ms  |  内存限制:65535 KB

难度:2

描述

问题很简单,在一条直线上,坐标从0开始到1000000;现在有n个石子在这条直线上(同一个位置可能有多个石子)

那么用一个定长为m的杆子去覆盖,请问最多能覆盖多少个石子?

输入
输入有多组数据

第一行有2个整数,n 和 m(n <= 50000,0 < m <= 1000)

第二行有n个整数代表每个石子的位置(所有的数小于50000)

输出
每种情况输出一个整数(最多能覆盖的石子数)
样例输入
3 2
0 0 1
5 2
0 1 2 4 5
样例输出
3
3
类似:http://blog.csdn.net/u012804490/article/details/24785835
AC码:
#include<stdio.h>
#include<string.h>
int num[50003],sum[50003];
int main()
{
	int n,m,d,i,a;
	while(~scanf("%d%d",&n,&m))
	{
		memset(num,0,sizeof(num));
		for(i=0;i<n;i++)
		{
			scanf("%d",&a);
			num[a]++;
		}
		sum[0]=num[0];
		for(i=1;i<50000;i++)
		{
			sum[i]=sum[i-1]+num[i];
		}
		d=sum[m];
		for(i=m+1;i<50000;i++)
		{
			if(d<(sum[i]-sum[i-m-1]))
				d=sum[i]-sum[i-m-1];
		}
		printf("%d\n",d);
	}
	return 0;
}

时间: 2024-08-01 03:04:22

NYOJ 610 定长覆盖的相关文章

NYOJ 题目610 定长覆盖(水)

定长覆盖 时间限制:2000 ms  |  内存限制:65535 KB 难度:2 描述 问题很简单,在一条直线上,坐标从0开始到1000000:现在有n个石子在这条直线上(同一个位置可能有多个石子) 那么用一个定长为m的杆子去覆盖,请问最多能覆盖多少个石子? 输入 输入有多组数据 第一行有2个整数,n 和 m(n <= 50000,0 < m <= 1000) 第二行有n个整数代表每个石子的位置(所有的数小于50000) 输出 每种情况输出一个整数(最多能覆盖的石子数) 样例输入 3 2

探究一种定长队列操作(C语言版本)

一 问题来源:南京烽火通信面试 二 问题: 现有一种定长队列,长度为2的n次方,此队列可被多线程访问,但必须确保线程级安全,即在任意时刻,队列的长度保持不变. 三 笔者分析 1. 队列的存储结构--链式和顺序均可. 2. 长度为2的n次方--便于移动队头和队尾指针,假设队列长度为size,那么rear = (rear + 1) & (size - 1),&运算比算术求模运算效率高.为此,笔者使用了顺序队列. 3. 怎么确保线程级安全 笔者认为此系统一定同时存在多个读者和写者,读者是读取队头

定长记录采用数据库读写并非最佳解决方案

对于有些应用场合如仪器仪表的采样数据,不需要对数据排序.插入和修改,只需要对数据写和读操作,在这种情况下,使用数据库来存取这样的记录数据,未必是最佳的选择,本文根据工作实践,采用文件的分块记录的方法,来处理采样这样的定长记录数据,实践证明,通过文件的分块存储方法,比数据库存储方法读写速度更快,尤其是在处理大批量的记录数据的读写的时候,这种速度上的优势更为显著.下面是分块记录的具体实现方法: 首先,假设我们的记录数据为:记录id号,电流,电压,温度,电阻,用结构体表示为: [html] view

内存池--定长内存池

简介 STL的 __pool_alloc, __mt_alloc,boost的pool系列, ace的ACE_Cached_Allocator均为定长内存池. 说明 内存池,根据存储的元素的长度是否可变,分为变长,与定长两种内存池. 从逻辑上来讲,定长内存池只需存储相同大小的元素,因此无须花费额外的空间(数据结构)来存储元素长度的信息. 以上几种定长内存池都可以较好的处理定长内存频繁分配的问题. STL--pool_alloc pool_alloc,原理是挂了16个链表(_S_free_list

报文格式【定长报文】

定长报文简介 定长报文,是目前使用最广泛的报文,同时比较简单的报文格式.理解起来也较为简单,但定长报文也有自身的局限性.其中最大的问题在于,如果定义域的长度需要加长,这时候相关的配置与程序代码都需要进行相应的改变,所以维护很不方便. 定长报文,就是使用固定的长度来表示一个信息.本报文格式常见于金融银行业,所以以银行开户场景为例说明,例如银行柜面开户时,需要记录开户人的姓名,假定用户名用30个字节来表示,这样应该就可以满足国人的需要,15个汉字长度.当然我们这里也有开户时间的需要,那我们假定为8位

定长内存池之BOOST::pool

内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1.              不定长内存池.典型的实现有apr_pool.obstack.优点是不需要为不同的数据类型创建不同的内存池,缺点是造成分配出的内存不能回收到池中.这是由于这种方案以session为粒度,以业务处理的层次性为设计基础. 2.             定长内存池.典型的实现有LOKI.B

“串”的定长顺序存储表示的实现

串--数据结构的实现--定长存储顺序. //头文件sstring.h #pragma once #include<iostream> using namespace std; #define STRING_SIZE 20 typedef char Sstring[STRING_SIZE+1]; int length(Sstring S) { return strlen(S); } void StrAssign(Sstring T, char *str) { int i=0; while(*st

串的定长顺序存储表示

串的定长顺序存储表示是一种类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列. 在实现时主要实现以下功能: int Length(SString s);                               //串长 bool StringConcat(SString T, SString s1, SString s2);//用T返回s1和s2连接的串 void PrintString(char T[]);                          //输出 b

定长单元的批次内存缓存池的简洁实现

问题描述: 1.内存管理计算机编程中一个基本问题,其目的在于: 1)一次可分配多个单元块,缓存维护,以改善反复的小对象申请的性能开销: 2) 管理以分配的内存,有效减少碎片的产生: 3) 保证软件使用的内存透明,了解峰值,了解使用情况,便于优化查错: 2.常用的内存管理机制有以下: 1) 变长块,依靠链表维护,一个节点一块申请了的内存,内存块大小不等,等接到一个申请时,先查维护的链表,若有可从链表取出.这种方法有很多缺点:1,当申请的内存块要遍历链表节点找到大小合适的块,最坏情况下需要把链表所有