Problem:Cow Lineup

Problem:Cow Lineup

Description

有N头牛(1 <= N <= 100,000) 排成一列。每头牛有一个标号,范围在01000000000,第 i 头牛的编号为B(i)。多头牛可以共享一个编号。John想,如果前后相邻的多头牛能有相同的编号,将会更好。为了使前后相连且编号相同的牛的数量尽可能多,John将选择 K 个编号,然后移除编号与这K个编号相同的牛。请帮忙选择编号。

Input

第1行:N和K
第2至N+1行:Line i+1 第i头牛的编号 B(i)

Output

连续的编号相同的牛的最大总数。

Sample Input

9 1
2
7
3
7
7
3
7
5
7
有9头牛,要选择1个编号的牛移除。

Sample Output

4
提示:通过移除编号是3 的牛,将有4个编号为7的牛相连

这道题,是一道队列题可以依次搜索并删去寻最优解,本花花累了,改日发解析,代码如下:

#include<bits/stdc++.h>
using namespace std;
map<int,int> cow;
long long c;
int f[1000000];
int ans=-1;
int main()
{
	int n,d;
	cin>>n>>d;
	int kind=d+1;
	int dif=0;
	int head=1;
	for(int i=1;i<=n;i++)
	{
		cin>>f[i];
		if(cow[f[i]]==0)
		  dif++;
		cow[f[i]]++;
		while(dif>kind)
		{
			cow[f[head]]--;
			if(cow[f[head]]==0)
			  dif--;
			head++;
		}
		ans=max(ans,cow[f[i]]);
	}
	cout<<ans;
	return 0;
}

蟹蟹,记得点攒哦!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值