Codeforces Round #687 B. Repainting Street(贪心)
地址:http://codeforces.com/contest/1457/problem/B
题意:
n个房子,颜色为ci
每次操作可以对长度为k的一段房子里的任意一个房子进行任意染色(或不染),使得所有房子颜色相同的最少操作数。
解析:
ci<=100,考虑枚举每一个ci
如果ci != i,说明需要染色,那么以它为首的长度为k的区间,都不需要看了,所以下标直接+k跳过即可,
#include<iostream> #include<cstring> #include<map> #include<stack> #include<queue> #include<cstdio> #include<cmath> #include<string.h> using namespace std; typedef long long ll; const int maxn=1e5+10; const int inf=99999999; int a[maxn]; int main() { int t; cin>>t; while(t--) { int n,k; map<int,int>mp; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++; int minn=inf; for(int i=1;i<=100;i++) { if(mp[i]==0) continue; int cnt=0; int j; for(j=1;j<=n;) { if(a[j]!=i) { cnt++; j+=k; } else { j++; } } minn=min(minn,cnt); } cout<<minn<<endl; } return 0; }