2020寒假【gmoj1876】【约会】

题目描述

农场主约翰养了两群有世仇的牛,它们被称为蒙塔戈斯家族和卡普鲁特家族。蒙塔戈斯家族的成员,罗密欧,爱上了美丽的朱丽叶,但后者正好是卡普鲁特家族的成员。罗密欧希望与朱丽叶约会,但不希望卡普鲁特家族的其他成员发现(否则会有可怕的事情发生!)

​ 罗密欧和朱丽叶希望在牧场栅栏边一块尽可能大的区域中相见,这样他们可以边散步边聊天。然而,这块区域中不应该有太多的卡普鲁特家族成员,否则,他们俩被发现的机会就会大得多。罗密欧发现在整个牧场栅栏边有P块草坪呈直线排列(1<=P<=1000),在这些草坪上总共有N位卡普鲁特家族的成员在吃草(1<=N<=1000)。每个卡普鲁特家族的成员在一些相邻的草坪上吃草。现在,罗密欧求助于聪明的你,希望你能找出一个最大的范围(指一些相邻的草坪),在这个范围的草坪中,至多有C(1<=C<=1000〉位卡普鲁特家族的成员在吃草。

输入

第一行,包含三个整数:N,P,C

第二至N+1行:每行包括一个整数X(1<=X<=P-1),代表一个卡普鲁特家族成员在栅栏边的第X和X+1块草坪之间吃草,多个卡普鲁特家族成员可以在同一块草坪内一起吃草。

输出

只有一行:一个整数,代表一个最大的草坪范围(指这些草坪的块数),在这个范围内最多只有C个卡普鲁特家族的成员在吃草。

样例输入

2 6 1
2
3
(解释:栅栏边的草坪分为六块:1 2 3 4 5和6。有两个卡普鲁特家族成员,一个在第二和第三块草坪上吃草,一个在第三和第四块草坪上吃草)

样例输出

3

(解释:在第四块至至第六块草坪间只有一个卡普鲁特家族的成员在吃草)

分析

这题的数据也很坑:它说一头奶牛可以吃两块草地,但是实际上一头牛最终只占一块草地。。。
然后求一个前缀和,再来个区间差就完了。。。

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,p,c,a[1010],maxx,f; 
int main()
{
	freopen("meet.in","r",stdin);
	freopen("meet.out","w",stdout);
    cin>>n>>p>>c;
    for(int i=1;i<=n;i++)
    {
    	int x;
    	scanf("%d",&x);
    	a[x+1]++;
	}
	for(int i=1;i<=p;i++)
	{
		a[i]=a[i-1]+a[i];
	}
	for(int i=1;i<=p;i++)
	{
		for(int j=1;j<=p;j++)
		{
			if(a[i]-a[j]<=c)
			{
				maxx=max(i-j,maxx);
			}
		}
	}
	cout<<maxx;
	fclose(stdin);
	fclose(stdout);
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值