3272 小蓝的漆房
将devc++设置支持编译就能用新的遍历方式
for(auto &x : s)//遍历容器s,变量为x
/*
多循环的嵌套:
计数是否需要重置为0;
是否因为ans定义成全局变量导致ans在比较多时候会出现错误*/
/*
1.对于一个标准色,对目标数组遍历,
如果和标准相同检查下一个,
否则将当前元素在内的K个元素一起“涂成”标准色,
表现为cnt++。
2.标准色的获取:用无序数组unorder_set进行存储,然后可以用auto进行遍历
(这里遍历的顺序是不知道的)
*/
#include <bits/stdc++.h>
using namespace std;
//思想:每次只是操作一个数
//确定涂房子的标准(哪个数)
int main() {int t; cin >> t;for (int i = 0, n, k; i < t; i++) {cin >> n >> k;vector<int> arr(n);unordered_set<int> s;for (int j = 0; j < n; j++) {cin >> arr[j];s.insert(arr[j]); //一个集合,防止重复记录}int ans = INT_MAX;for (unordered_set<int>::iterator it = s.begin(); it != s.end(); ++it) {int cnt = 0; // 计数器,用于记录需要操作的次数// 遍历数组arrfor (int j = 0; j < n; j++) {if (arr[j] == *it) continue; // 如果当前元素与集合中的元素相同,则跳过cnt++; // 否则,计数器加1j =j + k - 1; // 跳过接下来的k-1个元素}ans = min(ans, cnt); // 更新答案为当前最小的操作次数}//两个循环的意思://对于集合中每一个元素都要进行判断cout << ans << endl;}return 0;
}
我的代码:
还有一些问题,左边能过,右边过不了。
遍历也有问题?
#include<bits/stdc++.h>
using namespace std;int main()
{int t;cin>>t;while(t--){int n,k;cin>>n>>k;vector<int> arr(n);unordered_set<int> s;for(int i=0;i<n;i++){cin>>arr[i];s.insert(arr[i]);}int ans=INT_MAX;//因为是标准色之间的比较,所以ans定义在外面for(auto &x : s){int cnt=0;for(int j=0;j<n;j++){if(arr[j]==x) continue;cnt++;j+=k-1;}ans=min(ans,cnt);}cout<<ans<<'\n';}return 0;
}