• 题目链接:

    https://www.luogu.org/problemnew/show/UVA11536

  • 题目大意:

    给定一个\(N,M,K\),构造这样的数列:

    \(x[1]=1,x[2]=2,x[3]=3\)

    \(x[i]=(x[i-1]+x[i-2]+x[i-3])\mod M+1(N>=i>=4)\)

    然后问你是否存在一个在\(x[1]\)到\(x[n]\)中的区间,使得\([1,K]\)所有元素在其中至少出现过一次。

    若存在,输出这个区间最短长度;否则输出\("sequence\) \(nai"\)

    有T组数据

  • 分析:

    我们可以想到用滑动窗口的改进做法。

    搞一个左指针\(l\),右指针\(r\),和一个\(cnt\)数组记录每个元素相对应在\([l,r]\)中的出现次数。

    然后不断尝试右移\(r\),同时将\(cnt[x[r]]++\),如果\(cnt[x[r]]==1\),就让\(done++\),表示多了一个新元素出现在区间内,如果\(done==k\),说明所有元素出现过一次,这时尝试右移左指针,用上面类似的操作,只不过判定有所区别,直到\(done!=k\)说明不满足性质,记录下此时\(r-l\)长度,再重复右移\(r\)的操作

    其实如果你对莫队有了解的话这些应该很容易理解

  • 注意:

    庆幸的是由于\(\mod M\)的限制,数列中的数都很小,可以直接记录,不必用map或离散化

  • 代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#define inf 0xfffffff
using namespace std;
const int maxn=1000009;
int t,n,m,k;
int f[maxn];
int cnt[1005];
int main(){
scanf("%d",&t);
for(register int ite=1;ite<=t;ite++){
memset(cnt,0,sizeof(cnt));
scanf("%d %d %d",&n,&m,&k);
f[1]=1,f[2]=2,f[3]=3;
for(register int i=4;i<=n;i++)f[i]=(f[i-1]+f[i-2]+f[i-3])%m+1;
int l=1,r=1,done=0,ans=inf;
while(r<n){
int g=f[r++];
if(g>=1&&g<=k)cnt[g]++;
if(cnt[g]==1)done++;
while(done==k&&l<r){
ans=min(ans,r-l);
g=f[l++];
cnt[g]--;
if(cnt[g]==0)done--;
}
}
printf("Case %d: ",ite);
if(ans==inf)puts("sequence nai");
else printf("%d\n",ans);
}
return 0;
}

luogu题解 UVA11536 【Smallest Sub-Array】最短set区间&滑动窗口的更多相关文章

  1. luogu题解P2312解方程--暴力模+秦九韶

    题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...

  2. luogu题解 P1099 【树网的核】树的直径变式+数据结构维护

    题目链接: https://www.luogu.org/problemnew/show/P1099 https://www.lydsy.com/JudgeOnline/problem.php?id=1 ...

  3. Luogu P1886 滑动窗口

    P1886 滑动窗口 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The a ...

  4. 【luogu题解】P1546 最短网络 Agri-Net

    题目 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场.为了用最小的消费,他想铺设最短的光纤去连接所有的农场. 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并 ...

  5. luogu题解P1967货车运输--树链剖分

    题目链接 https://www.luogu.org/problemnew/show/P1967 分析 NOIp的一道裸题,直接在最大生成树上剖分取最小值一下就完事了,非常好写,常数也比较小,然而题解 ...

  6. luogu题解P4198楼房重建--线段树神操作

    题目链接 https://www.luogu.org/problemnew/show/P4198 分析 一句话题意,一条数轴上有若干楼房,坐标为\(xi\)的楼房有高度\(hi\),那么它的斜率为\( ...

  7. luogu题解P1032字串变换--BFS+STL:string骚操作

    题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...

  8. luogu题解P2486[SDOI2011]染色--树链剖分+trick

    题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在 ...

  9. luogu题解 P3709 【大爷的字符串题】

    题目链接: https://www.luogu.org/problemnew/show/P3709 思路: 首先我是没读懂题目的,浏览了讨论区的dalao发现才知道就是求区间众数的出现次数. 然后肯定 ...

随机推荐

  1. cha[] strrev(char[])

    反转字符串  保留在原函数中

  2. 开启两个线程,一个线程打印A~Z,一个线程打印1~52的数据

    开启两个线程,一个线程打印A-Z,一个线程打印1-52的数据 import java.util.concurrent.locks.Condition; import java.util.concurr ...

  3. mysql 更新存在就累加,不存在就插入语法

    INSERT INTO tb_http_tomcat_monitor_1 (id,total_res_time,total_req_count,req_dispose_count,queue_size ...

  4. CentOS yum安装软件时保留安装包及依赖包或者自动下载安装包及相关依赖包

    CentOS上安装某个软件一般都有很多相关的依赖包,当然,这也与我们安装时software selection步骤中选择的版本有关系,我们服务器在安装CentOS时一般选择Basic Web Serv ...

  5. CentOS 安装 Mongodb详解 --- 有Linux基础

    安装包:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.1.tgz 安装过程 安装pstree小工具,以及其使用 关闭 ...

  6. 互操作性 a C++ library which enables seamless interoperability between C++ and the Python programming language

    https://zh.wikipedia.org/wiki/互操作性 就软件而言,互操作性——这条术语用来描述的是不同的程序(programs)借助于同一套交换格式(exchange formats) ...

  7. ubuntu下如何使得普通用户能够启动wireshark?

    一. 将dumpcap的用户组更改为wireshark sudo chgrp wireshark /usr/bin/dumpcap 二. 设置其他用户也具有与root一样的权限来执行dumpcap s ...

  8. javascript之DOM总结

    DOM简介    全称Document Object Model,即文档对象模型.DOM描绘了一个层次化的树,允许开发人员添加.删除.修改页面的某一部分.    浏览器在解析HTML页面标记的时候,其 ...

  9. Eureka 2.0 闭源--选择Consul???[转]

    原文链接: https://www.cnblogs.com/williamjie/p/9369800.html 在上个月我们知道 Eureka 2.0 闭源了,但其实对国内的用户影响甚小,一方面国内大 ...

  10. 2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)

    一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能. 在项目一开始可以SE24创建一个类来供整体开发使用, ...