USACO 2011 November Cow Lineup /// map set 尺取法 oj25279
题目大意:
输入n 接下来n行描述n头牛的编号num和品种id
得到包含所有id的最短段 输出最短段的编号差
6
25 7
26 1
15 1
22 3
20 1
30 1
4
INPUT DETAILS:
There are 6 cows, at positions 25,26,15,22,20,30, with respective breed IDs 7,1,1,3,1,1.
OUTPUT DETAILS:
The range from x=22 up through x=26 (of total size 4) contains each of the distinct breed IDs 1, 3, and 7 represented in FJ's herd.
有思路而不会代码实现也是够痛苦
将牛按num排序后
15 20 22 25 26 30
1 1 3 7 1 1
将15为段头 直到段尾为25时符合要求出现了所有id
但 id 1 出现过两次 所以可以缩小该段 将段头移向下一位20
此时为符合要求的最小段 保存当前段的编号差
将段头移向下一位 继续移动段尾
直到符合要求进行判断 更新保存最小的编号差
#include <bits/stdc++.h>
using namespace std;
struct Cow{ int num,id; }cow[];
map <int,int> m; /// 记录id出现的次数
set <int> id_set; /// 记录出现过的品种id 得到一共有多少种品种
bool cmp(Cow q,Cow p)
{
return q.num<p.num;
} /// 结构体按编号num排序 不会重复所以不需考虑相等
int main()
{
/// num_map为符合要求的一段的该段当前id数
/// num_id为该队中的所有id数
/// head tail为当前该段的段头和段尾
int n,num_id,num_map,head,tail,mini;
while(~scanf("%d",&n))
{
id_set.clear(); m.clear();
for(int i=;i<n;i++)
{
scanf("%d%d",&cow[i].num,&cow[i].id);
m[cow[i].id]=; id_set.insert(cow[i].id);
}
sort(cow,cow+n,cmp); num_id=id_set.size(); /// set可以去重 即所有id数
head=tail=num_map=;
mini=0x3f3f3f3f; // for(int i=1;i<=n;i++)
// printf("%d %d\n",cow[i].num,cow[i].id);
// printf("\n"); while()
{
while(num_map!=num_id && tail<n)
{
if(m[cow[tail].id]==) num_map++;
m[cow[tail++].id]++;
/// 如果此id没出现过则该段当前id数+1
/// m记录该段id出现次数
} /// 持续记录id,直到该段当前id数为所有id数 或 已到队尾 if(tail==n && num_map!=num_id) break;
/// 已到队尾 且 不存在符合要求的组合 则跳出 while(m[cow[head].id ]>)
m[cow[head++].id ]--;
/// 当前id数 为 所有id数 若段头的id在该段中出现次数>1
/// 则可缩小该段长度 段头可移到下一位
/// 如 13312 这种情况可缩小该段长度到 312 mini=min(mini,cow[tail-].num-cow[head].num); m[cow[head++].id]--; num_map--;
/// 继续遍历后面有无符合要求的组合
/// 段头移到下一位 该段中当前id数-1
}
printf("%d\n",mini);
} return ;
}
/*
6
25 7
26 1
15 1
22 3
20 1
30 1
*/
...原来这是尺取法
再加种写法 ...虽然差不多
while(head<=tail&&tail<=n)
{
if(num_map<num_id)
{
if(m[cow[tail].id]==) num_map++;
m[cow[tail++].id]++;
}
else if(num_map==num_id)
{
while(m[cow[head].id]>)
m[cow[head++].id]--;
mini=min(mini,cow[tail-].num-cow[head].num);
m[cow[head++].id]--; num_map--;
}
}
USACO 2011 November Cow Lineup /// map set 尺取法 oj25279的更多相关文章
- [USACO13JAN] Cow Lineup (单调队列,尺取法)
题目链接 Solution 尺取法板子,算是复习一波. 题中说最多删除 \(k\) 种,那么其实就是找一个颜色种类最多为 \(k+1\) 的区间; 统计一下其中最多的颜色出现次数. 然后直接尺取法,然 ...
- POJ 3061 Subsequence 尺取法 POJ 3320 Jessica's Reading Problem map+set+尺取法
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 5896 Desc ...
- bzoj3048[Usaco2013 Jan]Cow Lineup 尺取法
3048: [Usaco2013 Jan]Cow Lineup Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 225 Solved: 159[Subm ...
- H-The Cow Lineup(POJ 1989)
The Cow Lineup Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5367 Accepted: 3196 De ...
- bzoj 3048[Usaco2013 Jan]Cow Lineup 思想,乱搞 stl
3048: [Usaco2013 Jan]Cow Lineup Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 237 Solved: 168[Subm ...
- [bzoj 3048] [Usaco2013 Jan]Cow Lineup
[bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...
- POJ 3320 尺取法,Hash,map标记
1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...
- HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)
题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...
- 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
3377: [Usaco2004 Open]The Cow Lineup 奶牛序列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 16 Solved ...
随机推荐
- 11、jQueryEasyUI的基本组件
1.拖动的div <!--jquery 的主文件...--> <script type="text/javascript" src="../../js/ ...
- 计算机基础、python历史,环境,分类,安装
一.计算机基础 CPU:大脑,处理数据,计算 内存:临时储存数据,运行速度快,成本高,断电数据会消失:4G,8G,16G,32G 硬盘:1T,固态硬盘,机械硬盘:储存数据,文件,能长久保存 操作系统: ...
- 关于py中lxml模块的cssselect的小问题
今天在使用lxml进行解析页面的时候遇到了不能解析空格的问题,就是类似于: <div class="aa bb"></div> 使用cssselect('. ...
- <随便写>软件设计遵循的基本原则
1.高内聚,低耦合 所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则. 所谓低耦合,是指一个软件系统内不同 ...
- P3410 /// 最大流最小割
题目大意: https://www.luogu.org/problemnew/show/P3410 题解 https://www.cnblogs.com/2020pengxiyue/p/9463055 ...
- Android的WebView通过JS调用java代码
做项目时候会遇到我们用WebView 打开一个web,希望这个web可以调用自己的一些方法,比如我们在进一个web页面,然后当我们点击web上的某个按钮时,希望能判断当前手机端是否已经登录,如果未登录 ...
- 《代码大全2》读书笔记 Week4
<代码大全2>第8章:防御式编程 防御式编程的主要思想是子程序应该不因为非法的输入值被破坏,就好比开车时的防御式驾驶:你无法预估其他司机将会做什么,但你要采取措施保证当他人做出危险动作时自 ...
- jquery获取select选中项 自定义属性的值
<select id="serialNo" > <option value=''1' data-id="001">第一次</opt ...
- 使用 SpringBoot 配置发送邮件功能
1.使用 SpringBoot 配置发送邮件功能 项目总体结构 用户表设计 SET FOREIGN_KEY_CHECKS=0; CREATE DATABASE sample; USE sample; ...
- 项目到上传Gitee
1.码云上创建一个项目 testgit (名字随你) 2.本地创建一个文件夹D:/testgit,然后使用git bash 3.cd 到本地文件夹中D:/testgit, 4.使用 git init ...