求调
查看原帖
求调
800499
suzhikz楼主2024/7/26 20:59
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<queue>
#include<vector>
#include<stdio.h>
#include<map>
#include<set>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<bitset>
using namespace std;
int n;
int a[100005];
int ans;
int d[330*100000+100000];
int solve(){
	int b=330;
	int re=0;
	for(int i=0;i<=b;i++){
		for(int j=1;j<=n;j++){
			d[a[j]-i*(j-1)+33000000]++;
			re=max(re,d[a[j]-i*(j-1)+33000000]);
		}
		for(int j=1;j<=n;j++){
			d[a[j]-i*(j-1)+33000000]=0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=min(n,i+b);j++){
			if((a[j]-a[i])%(j-i)==0){
				d[(a[j]-a[i])/(j-i)+100000]++;
				re=max(re,d[(a[j]-a[i])/(j-i)+100000]);
			}
		}
		for(int j=i+1;j<=min(n,i+b);j++){
			if((a[j]-a[i])%(j-i)==0){
				d[(a[j]-a[i])/(j-i)+100000]=0;
			}
		}
	}
	return re;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	ans=solve();
	reverse(a + 1, a + n + 1);
	cout<<n-max(ans,solve());
	return 0;
}

2024/7/26 20:59
加载中...