UVA:11536 Smallest Sub-Array(尺取法)
来源:互联网 发布:淘宝海昌隐形眼镜 编辑:程序博客网 时间:2024/05/21 23:32
题意:求包含数字1——K的最小区间长度。
思路:尺取法。维护一个区间,右端点扩张一直到区间满足条件,此时更新答案,然后左端点逐步左移。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <map>#include <vector>#include <stack>#include <unordered_map>#include <queue>using namespace std;const int maxn=1000005;int a[maxn];int solve(const vector<int> &v,int k){ int ans=v.size()+1,st=0,ed=0; unordered_map<int,int> pos; int sz=0; while(true) { while(ed<v.size()&&sz<k) { if(1<=v[ed]&&v[ed]<=k) { if(pos.find(v[ed])==pos.end()||pos[v[ed]]<st) ++sz; pos[v[ed]]=ed; } ++ed; } if(sz<k) break; ans=min(ans,ed-st); if(1<=v[st]&&v[st]<=k) { if(pos[v[st]]==st) --sz; } ++st; } return ans;}int main(){ int T,kase=0; scanf("%d",&T); a[1]=1,a[2]=2,a[3]=3; while(T--) { int N,M,K; scanf("%d%d%d",&N,&M,&K); for(int i=4; i<=N; ++i) a[i]=(a[i-1]+a[i-2]+a[i-3])%M+1; vector<int> v(a+1,a+N+1); int ans=solve(v,K); printf("Case %d: ",++kase); if(ans==v.size()+1) puts("sequence nai"); else printf("%d\n",ans); } return 0;}
0 0
- UVA:11536 Smallest Sub-Array(尺取法)
- UVa 11536 - Smallest Sub-Array(尺取法)
- UVA 11536 - Smallest Sub-Array
- UVa 11536 - Smallest Sub-Array
- UVa 11536 Smallest Sub-Array
- Uva - 11536 - Smallest Sub-Array
- uva 11536Smallest Sub-Array
- UVA 11536 Smallest Sub-Array
- Smallest Sub-Array UVA
- uva 11536 - Smallest Sub-Array(Towpointer)
- UVA - 11536 Smallest Sub-Array 纪录
- uva 11536——Smallest Sub-Array
- UVA 11536(p255)----Smallest Sub-Array
- UVA - 11536 Smallest Sub-Array (滑动窗口)
- ACM UVA 11536 Smallest Sub-Array
- 11536 - Smallest Sub-Array
- uva 11536 - Smallest Sub-Array(two pointers)
- 【uva】11536-Smallest Sub-Array(区间移动问题)
- 在windows下使用xampp时遇到无法读取session的问题
- css div垂直水平居中实现
- win8系统换win7系统时出现“windows无法安装到这个磁盘。选中的的磁盘采用GPT分区形式”解决方案
- XPCOM指南-2_使用XPCOM组件
- 【学习OpenGL小记之一】 OpenGL开发环境配置
- UVA:11536 Smallest Sub-Array(尺取法)
- reaver 使用方法
- OC_02_可见度和方法
- nginx配置详解
- Valid Palindrome
- A Mini Locomotive(01背包题目2)
- 浅析CVE-2014-0196
- 深入理解MySQL的索引(二)
- UML类图