本文最后更新于 196 天前,其中的信息可能已经有所发展或是发生改变。
问题描述
小蓝是一位有名的漆匠,他的朋友小桥有一个漆房,里面有一条长长的走廊,走廊两旁有许多相邻的房子,每间房子最初被涂上了一种颜色。
小桥来找小蓝,想让他把整个走廊都涂成同一个颜色。小蓝告诉小桥,他每天只能涂一段长度为 kk 的区间。对于每个区间,他可以选择将其中的房子重新涂上任何一种颜色,或者保持原来的颜色不变。
小桥想知道小蓝至少要涂几天,才能让整个走廊变得美丽。
请帮助小桥解决这个问题。
输入格式
第一行包含一个整数 tt(1≤1001≤100),表示测试用例的数量。
每个测试用例的第一行包含两个整数 nn 和 kk(1≤k≤n≤1041≤k≤n≤104),第二行包含 nn 个整数 a1,a2,⋯,ana1,a2,⋯,an(1≤ai≤601≤ai≤60),分别表示每个房子最初的颜色。
保证所有测试用例中 nn 的总和不超过 104104。
输出格式
对于每个测试用例,输出一个整数,表示小蓝需要涂漆的最少天数。
样例输入
2
5 2
1 1 2 2 1
6 2
1 2 2 3 3 3
样例输出
1
2
运行限制
语言 | 最大运行时间 | 最大运行内存 |
---|---|---|
C++ | 1s | 256M |
C | 1s | 256M |
Java | 2s | 256M |
Python3 | 3s | 256M |
正确解法:
分析:模拟题目罢了
#include <iostream>
#include<cstring>
#include<unordered_set>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n; cin>>n;
for(int i =0;i<n;i++){
int l,w; cin>>l>>w;
vector<int> arr(l);
unordered_set<int> s;
for(int j = 0;j<l;j++){
cin >>arr[j];
s.insert(arr[j]);
}
int ans = 1e9;
for(auto &x:s){
int cnt = 0;
for(int j = 0;j<l;j++){
if(arr[j]==x) continue;
cnt++; j+= w-1;
}
ans = min(ans,cnt);
}
cout<<ans<<endl;
}
return 0;
}