1. 程式人生 > 實用技巧 >Codeforces Round #687 B. Repainting Street(貪心)

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; }