猫耳少女小 R 的数列游戏:最小修改次数
猫耳少女小 R 的数列游戏:最小修改次数
小 R 是一位可爱的猫耳女孩,她喜欢研究数列的 mex。现在她有一个长度为 n 的数列 a,她讨厌整数 k,因此她希望修改数列 a 的若干个元素为任意自然数,使得 a 的任意连续子串的 mex 都不等于 k。
请你求出最少需要修改多少个元素。
本题中,数列的 mex 被定义为数列中最小未出现的自然数,例如:
- mex{1,2,3}=0,因为 0 是自然数。
- mex{0,1,3}=2。
- mex{0,1,2}=3。
思路:
本题需要通过修改数列元素,使得任意连续子串的 mex 都不等于 k。那么我们可以先考虑特殊情况,即 k=0 的情况。此时,数列的任意连续子串的 mex 都不等于 0,因此只需要将数列中所有的 0 修改为任意自然数即可。修改的次数即为数列中不为 0 的元素个数。
接下来考虑 k>0 的情况。我们可以枚举所有小于 k 的自然数,假设当前枚举到的数为 i,那么我们需要统计数列中 i 的出现次数。我们将出现次数最小的那个数的出现次数作为需要修改的最小次数,即 minn=min(sum,minn)。最后输出 minn 即可。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int a[5005];
int main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int minn=100009;
if(k==0){
int sum=0;
for(int i=1;i<=n;i++){
if(a[i]>0){
sum++;
}
}
cout<<sum;
return 0;
}
for(int i=0;i<k;i++){
int sum=0;
for(int j=1;j<=n;j++){
if(a[j]==i){
sum++;
}
}
minn=min(sum,minn);
}
cout<<minn;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/m6NX 著作权归作者所有。请勿转载和采集!