ACM 尺取法 poj 3320
2014-02-22 12:48
204 查看
最近学一些简单的技巧,这个尺取法就是其一
http://poj.org/problem?id=3320
首先set记录所有的知识点
http://poj.org/problem?id=3320
题意:
书一共p页,第i页有一个知识点a[i],同一个知识点可以多次出现,想要读连续的书页把所有的知识点覆盖,求要读的最少的页数
思路:
首先set记录所有的知识点
假设从第s页到第t页刚好覆盖所有知识,记录下一个answear,那么s++继续增大t直到再次覆盖所有的知识,就又得到一个answear,去两个answear的最小值,同理继续增大s
/*这里是为了给一个尺取法的模板框架*/ #include <cstdio> #include <cstring> #include <map> #include <vector> #include <algorithm> #include <set> using namespace std; #define INF 0x0fff ffff #define MAXN 1000003 int p,a[MAXN]; void solve() { int i,n,res=p; set<int>all; for(i=0;i<p;i++) { scanf("%d",&a[i]); all.insert(a[i]); } n=all.size(); int s=0,t=0,num=0; map<int,int>cnt; for(;;) { while(t<p&&num<n) { if(cnt[a[t++]]++==0)/*出现新的*/ num++; } if(num<n)break; res=min(res,t-s); if(--cnt[a[s++]] == 0) num--; } printf("%d\n",res); } int main() { while(scanf("%d",&p)!=EOF) { solve(); } }
相关文章推荐
- 郭台铭首露退意 鸿海精密联合接班计划浮出
- 关于应用JavaScript百度地图的各种问题
- c++中预处理变量的作用
- 高斯混合模型理解
- myeclipse9 ssh框架搭建
- 将矩阵转化为LibSvm需要的格式
- hdu 3474 Necklace 单调队列
- Bridge模式/ Pimpl惯用法 实例
- 运动目标检测小结
- android:imeOptions属性
- 行车中软件抢单 6成用户认为不安全
- AD学习笔记之三 -- 域控制器上的简单操作介绍
- 建立专门的数组类处理有关数组的操作+扩展1
- OpenCV图像缩放操作
- Ubuntu中flash player安装的问题
- 移动互联网造浪 赴美上市或创10年新高
- WIN7安装打印机时提示“打印机无法安装,打印处理器不存在”处理方法
- 监管趋严 预警余额宝类基金
- 安卓android中 The connection to adb is down 解决方法,笔者自己解决的经验
- Darwin Streaming Server编译运行过程