题解 P5093 【[USACO2004OPEN]The Cow Lineup 奶牛序列】
考虑将奶牛分组。
将
例如,样例分成
容易发现,每一组的最后一个数字一定是在这一组中最后出现且只出现一次。
所以!把每个组的最后一个数字取出来,然后剩下的组不成一组的,必然存在没有出现的数字,将其取出。
所以答案是组数+1。
#include<cstdio>
#include<cstring>
const int N=10050;
int n,k,x;
int vis[N],tot,ans;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&x);
if(!vis[x])vis[x]=1,tot++;
if(tot==k){
//形成完整的一组,清空vis,累加答案。
memset(vis,0,sizeof(vis));
tot=0;
ans++;
}
}
printf("%d\n",ans+1);//组数+1
}