UVA11536:Smallest Sub-Array(最短子序列)
来源:互联网 发布:淘宝直通车溢价怎么算 编辑:程序博客网 时间:2024/04/30 01:53
作者:xq的acm之路
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2531
题目大意:给你一个公式:
X1 = 1
X2 = 2
X3 = 3
Xi = (Xi-1 + Xi-2 + Xi-3) % M + 1 for i = 4 to N
最多N个数,这些数组成一个序列,让你求出一个连续的序列1-K,在组成的1-K这个序列中,数的个数尽可能的少。
思路:两端收缩,符合条件就停止
代码如下:
#include <iostream>#include <cstring>#include <algorithm>using namespace std;int a[1000001],b[1001];int main(){ memset(a,0,sizeof(a)); int t,p=0; cin>>t; while(t--) { p++; int n,m,k; cin>>n>>m>>k; memset(b,0,sizeof(b)); if(k<=3) { cout<<"Case "<<p<<": "<<k<<endl; continue; } for(int i=0; i<=3; i++) a[i]=i; b[1]=b[2]=b[3]=1; int l=1,ans=3,Min=10000000; for(int j=4; j<=n; j++) { a[j]=(a[j-1]+a[j-2]+a[j-3])%m+1; if(!b[a[j]]) { b[a[j]]=1; if(a[j]<=k) ans++; } else { b[a[j]]++; } if(ans==k) { Min=min(Min,j-l+1); } while(l<=j) { if(a[l]<=k&&b[a[l]]==1) break; b[a[l]]--; l++; if(ans==k) { Min=min(Min,j-l+1); } } } if(Min!=10000000) cout<<"Case "<<p<<": "<<Min<<endl; else cout<<"Case "<<p<<": sequence nai"<<endl; } return 0;}
0 0
- UVA11536:Smallest Sub-Array(最短子序列)
- 11536 - Smallest Sub-Array(滑动窗口)
- 11536 - Smallest Sub-Array
- Smallest Sub-Array UVA
- UVA 11536 - Smallest Sub-Array
- UVa 11536 - Smallest Sub-Array
- UVa 11536 Smallest Sub-Array
- Uva - 11536 - Smallest Sub-Array
- uva 11536Smallest Sub-Array
- Smallest Sub Array-hihocoder-tiger
- UVA 11536 Smallest Sub-Array
- uva 11536 - Smallest Sub-Array(two pointers)
- 【uva】11536-Smallest Sub-Array(区间移动问题)
- UVa 11536 - Smallest Sub-Array(尺取法)
- UVa 11536:Smallest Sub-Array(滑动窗口)
- uva 11536smallest sub-array(滑动窗口)
- 11536 Smallest Sub-Array(入门级TwoPoint)
- UVA - 11536 - Smallest Sub-Array(滑动窗口)
- alexCTF sock题目
- 移动web
- IM系统:消息推送及离线存储
- VS2013密钥-所有版本
- 所有顶点之间的最短路径——Floyd算法
- UVA11536:Smallest Sub-Array(最短子序列)
- Linux 意外操作后如何进行数据抢救
- 路由模式的 RabbitMQ,以及与spring的结合
- IntelliJ IDEA2016.3.3 常用设置
- RxJava2 基础教程(一)HelloWorld
- 消息队列场景简介
- C语言中浮点数在计算机中的存储
- tomcat 服务器和 apache服务器共存
- Java 并发编程(二)——对象共享