AcWing 5462. 修改数列
原题链接
中等
作者:
追风小小少年
,
2024-03-24 13:27:57
,
所有人可见
,
阅读 1
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
int a[3] = {-1, 0, 1}, b[N],c[N];
int n, res = N;
int main()
{
cin >> n;
for (int i = 0; i < n; i ++) cin >> b[i];
int f = 0;
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 3; j ++)
{
int num = 0, flag = 0, cha = 0;
for (int k = 0; k < n; k ++) c[k] = b[k];
if (a[i] != 0) num ++;
if (a[j] != 0) num ++;
c[0] += a[i], c[1] += a[j];
cha = c[1] - c[0];
for (int k = 2; k < n; k ++)
{
int v = c[k - 1] + cha;
if (v != c[k] && v != c[k] - 1 && v != c[k] + 1)
{
flag = 1;
break;
}
if (v == c[k] - 1 || v == c[k] + 1) num ++;
c[k] = v;
}
if (flag == 0)
{
res = min(res, num);
f = 1;
}
}
}
if (f == 0) cout << -1 << endl;
else cout << res << endl;
return 0;
}