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
来源
刘成
上传者
刘成

ac代码

#include<string.h>
#include<stdio.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a>b?b:a)
int num[50005],sum[50005],minn,maxn;
int main()
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		int i;
		memset(num,0,sizeof(num));
		memset(sum,0,sizeof(sum));
		maxn=-1;
		minn=50005;
		for(i=0;i<n;i++)
		{
			int a;
			scanf("%d",&a);
			minn=min(a,minn);
			maxn=max(a,maxn);
			num[a]++;
		}
		sum[minn]=num[minn];
		for(i=minn+1;i<=maxn;i++)
		{
			sum[i]=sum[i-1]+num[i];
		}
		int ans=-1;
		if(maxn-minn<m)
			ans=sum[maxn];
		for(i=minn+m;i<=maxn;i++)
		{
			int temp=sum[i]-sum[i-m-1];
			if(temp>ans)
				ans=temp;
		}
		printf("%d\n",ans);
	}
}
时间: 2024-07-29 12:13:28

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

nyoj 1099 Lan Xiang&#39;s Square (水题)

题目1099 题目信息 运行结果 本题排行 讨论区 Lan Xiang's Square 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 Excavator technology which is strong, fast to Shandong to find Lan Xiang. Then the question comes.. :) for this problem , i will give you four points. you just judge

10进制正整数转4位定长的36进制字符串

题目描述: 请设计一个函数可以把10进制的正整数转换为4位定长的36进制字符串. 36进制的规则为:“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”; 举例说明: 1=“0001” 10=“000A” 20=“000K” 35=“000Z” 36=“0010” 100=“002S” 2000=“01JK” 这是腾讯2015校园招聘技术类研发笔试题中的一题,给出自己的答案,欢迎拍砖. solution: string convert(int x) { string re

探究一种定长队列操作(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