#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int vis[1010],d[1000100],n,m,k;
bool ok(){
for(int i=1;i<=k;i++)
if(!vis[i]) return 0;
return 1;
}
int main(){
int T,t=1;
scanf("%d",&T);
while(T--){
memset(vis,0,sizeof(vis));
scanf("%d%d%d",&n,&m,&k);
d[1]=1;d[2]=2;d[3]=3;
for(int i=4;i<=n;i++)
d[i] = (d[i-3] + d[i-2] + d[i-1]) % m + 1;
int l=1,r=1,res=10000000,ans=0;
while(l<=r && r<=n && l<=r){
if(ans==k){
res=min(res,r-l);
vis[d[l]]--;
if(!vis[d[l]] && d[l]<=k) ans--;
l++;
}else{
if(!vis[d[r]] && d[r]<=k) ans++;
vis[d[r]]++;
r++;
}
}
printf("Case %d: ",t++);
if(res==10000000)
printf("sequence nai\n");
else printf("%d\n",res);
}
}uva 11536 尺取法 滑动窗口
最新推荐文章于 2025-05-06 09:31:25 发布
本文介绍了一种基于滑动窗口的算法实现,该算法通过动态调整窗口大小来寻找符合条件的最短子序列长度。具体应用在给定序列中查找包含特定元素的最短连续子序列。文中使用了C++实现,并通过案例演示了算法的具体运行流程。
2167

被折叠的 条评论
为什么被折叠?



