codeforces - 978D【思维】
1 second
256 megabytes
standard input
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 .
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) .
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).
4
24 21 14 10
3
2
500 500
0
3
14 5 1
-1
5
1 3 6 9 12
1
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【思维】的更多相关文章
- Codeforces 424A (思维题)
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- Codeforces 1060E(思维+贡献法)
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- codeforces 1244C (思维 or 扩展欧几里得)
(点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...
- CodeForces - 417B (思维题)
Crash Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- CodeForces - 417A(思维题)
Elimination Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- CodeForces 625A 思维
题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...
- Vladik and Complicated Book CodeForces - 811B (思维实现)
Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...
- The Contest CodeForces - 813A (思维)
Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...
随机推荐
- css全站变灰
2020年4月4日全国哀悼日这一天,我发现不少网址都变灰了,我第一想法就是怎么做到的?不可能换素材整个网址重做一遍吧?后面发现是用的其实是css的filter滤镜: grayscale可以将图像转化为 ...
- apijson简单使用
apijson简单使用 介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库.为简单的增删改查.复杂的查询.简单的事务操作 提供了完全自动化的 ...
- [Usaco2006 Nov]Corn Fields牧场的安排
题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...
- 迈凯伦765LT/600LT/720S/650S/570S维修手册电路图Mclaren车间手册接线图
全套迈凯伦维修手册电路图Mclaren车间手册线路图:语言:English,German,French,Spanish,Chinese,Japanese.McLaren迈凯伦新GT维修手册电路图零配件 ...
- Linux下利用ifconfig命令查看和操纵网络接口
为了说明这个问题,首先我们需要解释一下在Linux系统下"网络接口"的含义.通俗来讲,Linux中的所谓网络接口就是指本机的网卡,它相当于计算机的一台负责对网络进行收发数据的外设. ...
- SpringBoot @Value 解析集合配置
引自:https://jitwxs.cn/d6d760c4.html 一.前言 在日常开发中,经常会遇到需要在配置文件中,存储 List 或是 Map 这种类型的数据.Spring 原生是支持这种数据 ...
- 前端知识(一)05 axios-谷粒学院
目录 一.axios的作用 二.axios实例 1.复制js资源 2.创建 axios.html 3.引入js 4.启动课程中心微服务 5.编写js 6.html渲染数据 7.跨域 8.使用生命周期函 ...
- Flask源码关于local的实现
flask源码关于local的实现 try: # 协程 from greenlet import getcurrent as get_ident except ImportError: try: fr ...
- 使用Jmeter对SHA1加密接口进行性能测试
性能测试过程中,有时候会遇到需要对信息头进行加密鉴权,下面我就来介绍如何针对SHA1加密鉴权开发性能测试脚本1.首先了解原理,就是需要对如下三个参数进行SHA1加密,(AppSecret + Nonc ...
- JavaFx ObservableList的使用详解
原文地址:JavaFx ObservableList的使用详解 | Stars-One的杂货小窝 最近在研究MVVM模式,发现可以将之前写的FxRecyclerView控件改造一下,便是开始尝试,尝试 ...