Codeforces Round #687 B. Repainting Street(貪心)
阿新 • • 發佈:2020-11-30
地址: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; }