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 ...
随机推荐
- 1242 斐波那契数列的第N项
1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F( ...
- CSS:CSS 图像拼合技术
ylbtech-CSS:CSS 图像拼合技术 1.返回顶部 1. CSS 图像拼合技术 图像拼合 图像拼合就是单个图像的集合. 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求. 使用图 ...
- ES6十大特性(转载CSDN)
1. const和let关键字 const用于定义常量. let用于定义变量.但是JavaScript中不是已经有变量了吗? 是的,这很正确,但用var声明的变量具有函数作用域,并会被提升到顶部. 这 ...
- 从客户端中检测到有潜在危险的 request.form值 以及 request.querystring[解决方法]
一.从客户端中检测到有潜在危险的request.form值 当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?如下图所示: 下面博主汇总出现这种错 ...
- Openstack组件实现原理 — Nova 体系结构
目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...
- Openstack组件部署 — Nova overview
目录 目录 前文列表 前言 Compute service overview Nova 的组件 nova-api service nova-api-metadata service nova-comp ...
- 1060 Are They Equal (25 分)
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...
- Java8 时间调节器
TemporalAdjuster 是做日期数学计算.例如,要获得“本月第二个星期六”或“下周二”. 让我们来看看他们的操作. 选择使用任何编辑器创建以下java程序在 C:/> JAVA Jav ...
- 调用API接口,查询手机号码归属地(3)
从mysql数据库获取电话号码,查询归属地并插入到数据库 #!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib, sys, pym ...
- li中下的a元素的字超出了li的宽度
网站搬迁,给你带来的不便敬请谅解! http://www.suanliutudousi.com/2017/10/21/li%E4%B8%AD%E4%B8%8B%E7%9A%84a%E5%85%83%E ...