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 ...
随机推荐
- yield列表反转 islice切片(2.6)
yield列表反转 islice切片 列表反转 l1 = [i for i in range(10)] print(l1) print(l1[::2]) l1.reverse() # 注: pytho ...
- BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...
- MySQL数据库(六) —— SQL注入攻击、视图、事物、存储过程、流程控制
SQL注入攻击.视图.事物.存储过程.流程控制 一.SQL注入攻击 1.什么是SQL注入攻击 import pymysql conn = pymysql.Connect( user="roo ...
- rpm升级时spec文件执行的流程
转自:https://www.cnblogs.com/zafu/p/7423758.html %pre 和 %post 脚本片段分别在软件包安装前和安装后执行.%preun 和 %postun 脚本片 ...
- python接口自动化(put请求)
python接口自动化(put请求) 一.put请求的作用:更新资源 二.应用 导包:import requests 调用requests.put()方法 参数有URL.data.headers,方法 ...
- JS获取CkEditor在线编辑的内容
参考博文:[实践]获取CKEditor的html文本.纯文本.被选中的内容及赋值 1.获取CKEditor被选中的内容 var mySelection = CKEDITOR.instances.WOR ...
- tomcat启动内存修改
# USE_NOHUP (Optional) If set to the string true the start command will # ...
- 从零开始搭建系统1.1——CentOs安装
本篇主要是记录安装CentOs的过程,为什么会选择CentOs,没有过多的原因,主要是出于CentOs相对来说安装的人比较多, 以后有问题了方便查资料.本次安装是安装在一台笔记本上,WIN7+Cent ...
- 继续搞我的linux
小程序研发已经告一段落,还是继续我的Linux研究.上次因为捣鼓那个fastab,结果吧虚拟机搞崩溃了.好吧,这次老子来装正式机,从机房拉来了一台破烂货,联想的老式服务器,开工吧. 用UltraISO ...
- Razor页面之添加TagHelper
1.右键项目-----添加------新建项 2.创建Razor试图导入 (Razor View Imports) 3.在创建的_ViewImports.cshtml中添加 @AddTagHelpe ...