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;
}
蟹蟹,记得点攒哦!!!