题意:
小西有一条很长的彩带,彩带上挂着各式各样的彩珠。已知彩珠有N个,分为K种。简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置)。某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上。 小布生日快到了,于是小西打算剪一段彩带送给小布。为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠。同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差。
题解:
双指针。

利用STL里面的pair容器,默认排序的性质,就可以不需要自己写一个自定义函数了。
因为宝石的种类很少,当我们每取一段范围时,我们暴力判断以下这个区间是否满足。
时间复杂度 O(nlogn+n*60) ?
双指针判断条件
如果这段区间的宝石满足 题目要求
那么我们r++,同时加上此位置的宝石数目。
如果满足了我们就l++,同时减去那个位置的宝石数目。

这里的区间5-8的区间长度是3,不是4 ,注意一下即可.
代码:

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include<iostream>
#include<cstdio>
#include <string.h>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<cmath>
#include <math.h>
#include<algorithm>//#define int long long
using namespace std;
const int maxn = 100;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;
vector <pair<int,int> > v;
int visited[100];
int n,k;
bool check(){for(int i=1;i<=k;i++){if(visited[i]==0) return false;}return true;
}signed main(){cin>>n>>k;for(int i=1;i<=k;i++){int m;cin>>m;for(int j=0;j<m;j++){int x;scanf("%d",&x);v.push_back(make_pair(x,i));}}sort(v.begin(),v.end());int l=0,r=0;int ans=MaxN;//for(auto it:v) cout<<it.first<<" "<<it.second<<endl;visited[v[0].second]++;while(r<n){//cout<<l<<" "<<r<<endl;if(check()){ans=min(ans,v[r].first-v[l].first);visited[v[l].second]--;l++;}else{r++;visited[v[r].second]++;}}cout<<ans<<endl;return 0;
}

[SCOI2009]生日礼物 双指针相关推荐

  1. P2564 [SCOI2009]生日礼物

    P2564 [SCOI2009]生日礼物 题意: n个彩珠,k个种类,分布在一个彩带上,现在要选取彩带的一部分,要求该部分包含所有种类的彩珠,且长度尽可能短,你能计算这个最短的长度吗? 1≤N≤100 ...

  2. bzoj 1293: [SCOI2009]生日礼物

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2380  Solved: 1290 [Submit][St ...

  3. P2564 [SCOI2009]生日礼物(尺取法/双指针)

    LINK 不得不说 双指针用法nb 题目 输入输出样例 输入 6 3 1 5 2 1 7 3 1 3 8 输出 3 思路: 建议看尺取法 代码: #include<bits/stdc++.h&g ...

  4. 【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

    来源:牛客网: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 小西有一条很长的彩带,彩带 ...

  5. [SCOI2009]生日礼物

    这道题很容易看出是一道单调队列题. 首先我们根据珠子的位置排序. 然后按顺序枚举一个个珠子. 如果该种珠子没有出现过标记上它的位置,如果出现过修改并打上当前位置.当所有珠子都出现后,将当前位置减去打标 ...

  6. BZOJ 1293 [SCOI2009]生日礼物

    [题解] 离散化+Two Pointer. 离散化的时候有些特殊姿势. #include<cstdio> #include<vector> #include<algori ...

  7. [SCOI2009]生日礼物 单调性尺取法

    题意:给你n个k种颜色的点,每个点都有坐标和颜色两个属性,选出一个长度尽量短的区间,使得每种颜色的点都在区间内出现. 数据范围: 对于50%的数据, N≤10000: 对于80%的数据, N≤8000 ...

  8. bzoj1293 [SCOI2009]生日礼物 单调队列

    比较好想的单调队列 码: #include<iostream> #include<cstdio> #include<algorithm> #include<m ...

  9. bzoj1293: [SCOI2009]生日礼物

    这题感觉很蠢啊. 就把每个点按顺序排序,然后队列搞一下. #include<cstdio> #include<iostream> #include<cstring> ...

最新文章

  1. 区块链技术的标准化和颠覆性
  2. TSC打印机编程C#
  3. typeof instanceof 之间的区别总结
  4. 使用keepalived监控tomcat 达到双机热备
  5. Python3.7.5安装(Windows10附pip更换下载源)
  6. 测试开发——flask视图函数与路由 实战重点
  7. Redis Cluster集群的搭建与实践[转]
  8. 蚂蚁金服招聘-高级数据技术工程师、大数据研发工程师/专家
  9. 一种身份证号码的编码压缩方法
  10. 天津全国计算机等级考试考点,2018年下半年全国计算机等级考试报考简章及天津考点安排...
  11. http 升级https
  12. MYSQL字符串聚合函数
  13. Java中excel的导出导入
  14. OracleClient
  15. 新闻关键字提取和新闻推荐
  16. H5二维码海报生成保存相关问题记录
  17. 乐视三合一摄像头和kinect_乐视三合一体感摄像头快评测,看看到底怎么玩?
  18. Linux mono环境,linux+mono+xsp+apache搭建asp.net环境
  19. 易經大意(13) 三和 韓長庚 著
  20. scala 编译插件_使用Scala插件在Griffon应用程序中编译和运行Scala代码

热门文章

  1. celery的初次使用
  2. OSI第一层:物理层功能及作用(详解与解释)
  3. 【OpenCV 4开发详解】分割图像——Mean-Shift分割算法
  4. 【OpenCV 4开发详解】图像直方图绘制
  5. Virtual Box+Centos7.0+Kaldi安装
  6. 青桔单车 chameleon 跨平台实践
  7. 使用ExpandableListView以及如何优化view的显示减少内存占用
  8. Hive的“rowid”
  9. python使用pyodbc连接sql server 2008
  10. C语言中的typedef