样例可过WA0

枚举变成的目标书,范围是1-100,100 中情况里,取最小的结果

覆盖的时候,选用贪心策略,每次都覆盖 k 个长度,如果当前位置 i,与目标颜色相同,就往后移动

@王建力 老师我已经修改思路了。

这是最新代码:

#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi  0
I AK IOI;
int t,n,k;
int main(){
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	cin>>t;
	while(t--){
		int a[10005],sum[10005],s=INT_MAX,id,l,r,ans,num=0;
		bool flag[105];
		memset(flag,0,sizeof flag);
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(!flag[a[i]])sum[++num]=a[i],flag[a[i]]=1;
		}
		for(int j=1;j<=num;j++){
			ans=0,l=0,r=0;
			for(int i=1;i<=n;i++){
				if(!l&&a[i]!=sum[j])l=i;
				if(l&&a[i]==sum[j])r=i;
				if(l&&r){
					int cnt=r-l;
					ans+=ceil(cnt*1.0/k);
					l=0,r=0;
				}
			}
			if(l&&!r)ans+=ceil((n-l+1)*1.0/k);
			s=min(s,ans);
		}
		cout<<s<<endl;
	}
	i_ak ioi;
}

已解决 @栗子酱 @稻叶昙 关帖