标签:数字 596 TV Hard Codeforces Version B2 define
Codeforces Round #596 (Div. 2)B2. TV Subscriptions(Hard Version)
题目:http://codeforces.com/contest/1247/problem/B2
题意:给出一个序列,可以选择K个数字,标记选择的数字,求能够在原序列中有连续d个数字被标记的最小的K
做法:记录下长度为d的区间中,存在多少个不同的数字。发现区间长度是一定的,就可以不断递推过去
AC代码:
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#include<set>
#define rep(x,a,b) for(int x=a;x<=b;x++)
using namespace std;
const int maxn=2e6+7;
int a[maxn];
int num[maxn];
int main()
{
int t,n,k,d;
scanf("%d",&t);
while(t--)
{
int ans=0,maxx=0;
scanf("%d%d%d",&n,&k,&d);
rep(i,1,n){scanf("%d",&a[i]);num[a[i]]=0;}
for (int i=1;i<=d;i++)
{
if (num[a[i]]==0)ans++;
num[a[i]]++;
}
int minn=ans;
for (int i=d+1;i<=n;i++)
{
if (a[i]==a[i-d])continue;
else
{
//区间右端点
if (num[a[i]]==0) ans++;
num[a[i]]++;
//区间左端点
if (num[a[i-d]]==1) ans--;
num[a[i-d]]--;
}
minn=min(minn,ans);
}
cout<<minn<<endl;
}
}
标签:数字,596,TV,Hard,Codeforces,Version,B2,define 来源: https://blog.csdn.net/w_udixixi/article/details/102772371
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。