题目链接
https://ac.nowcoder.com/acm/contest/7780/B
解题思路
数学题。
我为什么会这么菜,这都想不出来!
先建立一个满足条件的数组,与给出的数组做差。
将差值保存在map中,并统计相同差值的个数,找到其中次数最多的。
输出总数-最多次数,就是要改的个数。
AC代码
#include<bits/stdc++.h>
#define ll long long
#define sc(x) scanf("%lld",&x)
#define pr(x) printf("%lld",x)
using namespace std;
const int N=1e5;
ll n,x,ans,m[N];
map<ll,ll> cnt;
int main(){
sc(n);
for(int i=1;i<=n;i++){
sc(x);
m[i]=m[i-1]+i-1;
ans=max(ans,++cnt[x-m[i]]);
}
pr(n-ans);
}
京公网安备 11010502036488号