题目链接
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); }