题目传送门

思路
这道题目可以通过尺取法来完成 (我才不管什么必须用队列)
什么是尺取法呢?
顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。
之所以需要掌握这个技巧,是因为尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以尺取法是一种高效的枚举区间的方法,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案!
对于这道题,我们首先可以推出一个事实:

在任意一个符合条件的区间里,答案是区间内最多的那类牛的数量。

我们只需要从左到右扫描整个队列,找到每一个只含k+1种牛的区间(删除k种+保留的一种),取每个区间内数量最多牛的数量即可。

注意点: 血统编号在0-1,000,000,000之间,需要离散化。

代码

 #include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
int a[],lsh,cnt,l=,r,c[],ans=-;
int main()
{
int n,k;
cin>>n>>k;
for(int i=;i<=n;i++)
{
cin>>a[i];
if(!mp[a[i]])mp[a[i]]=++lsh;
a[i]=mp[a[i]];
}
while(r<=n)
{
r++;
if(!c[a[r]])cnt++;
c[a[r]]++;
while(cnt==k+)
{
c[a[l]]--;
if(!c[a[l]])cnt--;
l++;
}
ans=max(c[a[r]],ans);
}
cout<<ans<<endl;
return ;
}

【题解】P3069 [USACO13JAN]牛的阵容Cow Lineup-C++的更多相关文章

  1. 洛谷P3069 [USACO13JAN]牛的阵容Cow Lineup(尺取法)

    思路 考虑比较朴素的解法,枚举每个长度为\(k+1\)的区间,然后统计区间中出现次数最多的颜色.这样的话复杂度为\(O(n*k)\)的,显然不行. 观察到统计每个区间中出现次数最多的颜色中,可以只用看 ...

  2. [Luogu3069][USACO13JAN]牛的阵容Cow Lineup

    题目描述 Farmer John's N cows (1 <= N <= 100,000) are lined up in a row. Each cow is identified by ...

  3. LuoguP3069 【[USACO13JAN]牛的阵容Cow Lineup

    题目链接 看了看其他大佬的文章,为什么要控制右端呢 其实就是一个很简单的模拟队列趴... 难点就在于根据题意我们可以分析得一段合法区间内,不同种类个数不能超过k+2 哦当然,由于种类数范围过大,要对种 ...

  4. 【USACO11NOV】牛的阵容Cow Lineup 尺取法+哈希

    题目描述 Farmer John has hired a professional photographer to take a picture of some of his cows. Since ...

  5. 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup

    https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...

  6. 洛谷 P1522 牛的旅行 Cow Tours 题解

    P1522 牛的旅行 Cow Tours 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不 ...

  7. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party 题解

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  8. [USACO07JAN]平衡的阵容Balanced Lineup

    [USACO07JAN]平衡的阵容Balanced Lineup 题目描述 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) a ...

  9. 【洛谷】P2880 [USACO07JAN]平衡的阵容Balanced Lineup(st表)

    题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连 ...

随机推荐

  1. c函数模板实现

    实现冒泡排序模板 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <str ...

  2. Excel计算、统计函数

    Excel计算.统计函数 1.=SUMPRODUCT(array1,[array2]...) ​ 返回对应的区域或数组的乘积之和. 默认运算是乘法,但加.减和除也可能. 2.=COUNT 计数 3.= ...

  3. Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)

    Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...

  4. 【win10】 ffmpeg的安装

    安装肯定要先下载,官方下载地址:http://www.ffmpeg.org/download.html 然后会进入这个页面. 然后根据你的操作系统选择 根据自己系统选择,我的系统是64位的所以下载的是 ...

  5. SVM的概率输出(Platt scaling)

    SVM的概率输出(Platt scaling) 2015-10-22 10:38:19 闲渔Love吉他 阅读数 8121 文章标签: Platt Scaling Calibr 更多 分类专栏: 计算 ...

  6. Android 集成 支付宝支付

    调用代码: ALiPayUtil.pay(getActivity(), new ALiPayUtil.PayResponse() { @Override public void success(Pay ...

  7. Visual Stdio C++ 编译常见问题

    1. new 数组出现崩溃 new 数组时数组下标出现负值,但未做出错处理: new数组,数组字节数大于4MB的时候有可能出现crash! 解决办法: 加入 try  catch 后,这样的错误几乎没 ...

  8. CSS图片Img等比例缩放且居中显示

    常用来做图片放大显示的遮罩层imgScale HTML <div id="imgScale" > <img src=""> </d ...

  9. el-table表格错误问题

    .el-table--border th.gutter:last-of-type { display: block!important; width: 17px!important; } 如果不行,则 ...

  10. 3.Java集合-HashSet实现原理及源码分析

    一.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持,它不保证set的迭代顺序很久不变.此类允许使用null元素 二.HashSet的实现: 对于Ha ...