枚举变成的目标书,范围是1-100,100 中情况里,取最小的结果
覆盖的时候,选用贪心策略,每次都覆盖 k 个长度,如果当前位置 i,与目标颜色相同,就往后移动
枚举变成的目标书,范围是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;
}