#include #include using namespace std; const int N=10010; int n,k,a[N],sum[N]; int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; cin>>k; memset(sum,-1,sizeof(sum)); sum[a[1]]=1; int ans=n+1; for(int i=2;i<=n;i++){ if(sum[a[i]]!=-1)sum[a[i]]=i;//更新上一次出现位置 else sum[a[i]]=i,sum[a[i-1]]=i-1;//更新区间 int Min=n+1; for(int j=1;j<=k;j++)if(sum[j]==-1){Min=-1;break;}//排除不存在知识点的情况 if(Min!=-1){//如果所有知识点都出现过 for(int j=1;j<=k;j++)Min=min(Min,sum[j]);//找到最早的知识点出现位置 ans=min(ans,i-Min+1);//更新答案 } } cout<<ans<<endl; return 0;

C++实现假设一本教材中有P页每页包含第ai个知识点知识点会有所重复现给出每页的知识点ai以及需要看的知识点数K请你求出能够看完全部1~K个知识点的最短连续页数是多少。注意本题必有解不存在不包含的知识点。输入描述3行第1行包含1个数字P代表页数的个数P。第2行包含P个数字代表教材每页中的知识点ai。第3行包含1个数字K代表需要看完的K个知识点。输出描述1行表示最少连续页数。样例1输入101 2 4

原文地址: http://www.cveoy.top/t/topic/fQWC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录