D. Almost Arithmetic Progression
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Polycarp likes arithmetic progressions. A sequence [a1,a2,…,an][a1,a2,…,an] is called an arithmetic progression if for each ii (1≤i<n1≤i<n ) the value ai+1−aiai+1−ai is the same. For example, the sequences [42][42] , [5,5,5][5,5,5] , [2,11,20,29][2,11,20,29] and [3,2,1,0][3,2,1,0] are arithmetic progressions, but [1,0,1][1,0,1] , [1,3,9][1,3,9] and [2,3,1][2,3,1] are not.

It follows from the definition that any sequence of length one or two is an arithmetic progression.

Polycarp found some sequence of positive integers [b1,b2,…,bn][b1,b2,…,bn] . He agrees to change each element by at most one. In the other words, for each element there are exactly three options: an element can be decreased by 11 , an element can be increased by 11 , an element can be left unchanged.

Determine a minimum possible number of elements in bb which can be changed (by exactly one), so that the sequence bb becomes an arithmetic progression, or report that it is impossible.

It is possible that the resulting sequence contains element equals 00 .

Input

The first line contains a single integer nn(1≤n≤100000)(1≤n≤100000) — the number of elements in bb .

The second line contains a sequence b1,b2,…,bnb1,b2,…,bn(1≤bi≤109)(1≤bi≤109) .

Output

If it is impossible to make an arithmetic progression with described operations, print -1. In the other case, print non-negative integer — the minimum number of elements to change to make the given sequence becomes an arithmetic progression. The only allowed operation is to add/to subtract one from an element (can't use operation twice to the same position).

Examples
Input

Copy
4
24 21 14 10
Output

Copy
3
Input

Copy
2
500 500
Output

Copy
0
Input

Copy
3
14 5 1
Output

Copy
-1
Input

Copy
5
1 3 6 9 12
Output

Copy
1
Note

In the first example Polycarp should increase the first number on 11 , decrease the second number on 11 , increase the third number on 11 , and the fourth number should left unchanged. So, after Polycarp changed three elements by one, his sequence became equals to [25,20,15,10][25,20,15,10] , which is an arithmetic progression.

In the second example Polycarp should not change anything, because his sequence is an arithmetic progression.

In the third example it is impossible to make an arithmetic progression.

In the fourth example Polycarp should change only the first element, he should decrease it on one. After that his sequence will looks like [0,3,6,9,12][0,3,6,9,12] , which is an arithmetic progression.

解题思路:等差数列的公差相等, 所以前两个数就可以确定公差,记录后面的数满足公差需要多少步即可,O(6 * n)的复杂度。

附ac代码:

 1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <string>
5 #include <cmath>
6 #include <string>
7 #include <iostream>
8 #include <map>
9 #include <queue>
10 #include <stack>
11 #include <cstdlib>
12 const int maxn = 3 * 1e5 + 10;
13 const int inf = 0x3f3f3f3f;
14
15 using namespace std;
16 typedef long long ll;
17 const ll mod = 1e9 + 7;
18 int nu[maxn];
19 int tem[maxn];
20 queue<int>q;
21
22 int main(int argc, const char * argv[]) {
23 int n;
24 scanf("%d", &n);
25 for(int i = 0; i < n; ++i)
26 {
27 scanf("%d", &nu[i]);
28 }
29 if(n <= 2)
30 {
31 puts("0");
32 return 0;
33 }
34 int i, j, k;
35 int ans = inf;
36 for(i = -1; i <= 1; ++i)
37 {
38 for(j = -1; j <= 1; ++j)
39 {
40 tem[0] = nu[0] + i;
41 tem[1] = nu[1] + j;
42 int d = tem[1] - tem[0];
43 int cnt = abs(i) + abs(j);
44 for(k = 2; k < n; ++k)
45 {
46 int u = nu[k] - tem[k - 1];
47 tem[k] = d + tem[k - 1];
48 if(u == d) continue;
49 if(abs(u - d) <= 1)
50 {
51 cnt++;
52 // printf("%d ", tem[k]);
53 }
54 else break;
55 }
56 if(k == n)
57 {
58 ans = min(cnt, ans);
59 }
60 }
61 }
62 if(ans == inf) puts("-1");
63 else
64 printf("%d\n", ans);
65 return 0;
66 }

codeforces - 978D【思维】的更多相关文章

  1. Codeforces 424A (思维题)

    Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  2. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  3. Queue CodeForces - 353D (思维dp)

    https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...

  4. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

  5. CodeForces - 417B (思维题)

    Crash Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

  6. CodeForces - 417A(思维题)

    Elimination Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit  ...

  7. CodeForces 625A 思维

    题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...

  8. Vladik and Complicated Book CodeForces - 811B (思维实现)

    Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...

  9. The Contest CodeForces - 813A (思维)

    Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...

随机推荐

  1. Redis 实战 —— 01. Redis 数据结构简介

    一些数据库和缓存服务器的特性和功能 P4 名称 类型 数据存储选项 查询类型 附加功能 Redis 使用内存存储(in-memory)的非关系数据库 字符串.列表.哈希表.集合.有序集合 每种数据类型 ...

  2. LSM(Log Structured Merge Trees ) 笔记

    目录 一.大幅度制约存储介质吞吐量的原因 二.传统数据库的实现机制 三.LSM Tree的历史由来 四.提高写吞吐量的思路 4.1 一种方式是数据来后,直接顺序落盘 4.2 另一种方式,是保证落盘的数 ...

  3. 什么是Etcd,如何运维Etcd ?

    介绍 ETCD 是一个分布式.可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据:当然,它不仅仅用于存储,还提供配置共享及服务发现:基于Go语言实现. ETCD的特点 简单: ...

  4. vue2.0、vue3.0不同之处

    一.响应式赋值操作不同 Vue2.0 1.通过data返回对象做相应: 2.对复杂的对象或数组下的属性等深层次的改变需要通过$set的方式. Vue3.0 1.ref实现简单的实现响应,通过value ...

  5. MySQL 中的临时表

    在使用 explain 解析一个 sql 时,有时我们会发现在 extra 列上显示 using temporary ,这表示这条语句用到了临时表,那么临时表究竟是什么?它又会对 sql 的性能产生什 ...

  6. 浅析鸿蒙中的 Gn 与 Ninja(一)

    目录: Ninja简介 make 的 3 个特性 举例说明Ninja 的用法 如何向构建工具 Ninja 描述构建图 后记 鸿蒙系统的编译构建是基于 Gn 和 Ninja 完成的,那么 Gn 和 Ni ...

  7. CSSmargin击穿问题(子元素margin-top会影响父元素)

    最近写一个H5页面的时候发现了这个被忽视的问题,一时没想到什么原因,搜了半天,记录一下,方便他人踩坑.唉,有些东西不用就忘. 一.问题描述 <div class="container& ...

  8. Linux下运行java报错:Error: Could not find or load main class SocketIOPropertites

    [root@node01 testfileio]# javac SocketIOPropertites.java && java Soc ketIOPropertitesError: ...

  9. 思考gRPC :为什么是HTTP/2

    Introducing gRPC Support with NGINX 1.13.10 - NGINX https://www.nginx.com/blog/nginx-1-13-10-grpc/ 思 ...

  10. Spring5源码,@ModelAttribute

    一.什么是@ModelAttribute注解 二.@ModelAttribute注解相关代码详解 一.什么是@ModelAttribute注解 @ModelAttribute注解主要用来将请求转换为使 ...