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 ...
随机推荐
- java 文件上传的那些事
文件上传 逻辑 @Value("${sava_path}") private String sava_path; @Override public String saveFile( ...
- SAP下载文档为乱码
通过事物WE60下载的文档为乱码,主要原因是编码格式的不匹配,通常默认的编码格式为ANSI编码,那么我们需要将源码的编码格式转换成UTF-8,这样问题可以解决了. 附:编码格式介绍 不同的国家和地 ...
- CALL TRANSACTION 使用说明
以调用事务VA03为例: 在程序中添加如下代码就可以实现 SET PARAMETER ID 'AUN' FIELD var. CALL TRANSACTION 'VA03' AND SKIP FIR ...
- LSTM+CRF进行序列标注
为什么使用LSTM+CRF进行序列标注 直接使用LSTM进行序列标注时只考虑了输入序列的信息,即单词信息,没有考虑输出信息,即标签信息,这样无法对标签信息进行建模,所以在LSTM的基础上引入一个标签转 ...
- JVM虚拟机基础
JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机.它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作. Ja ...
- 如果using语句中出现异常,资源会被释放掉吗?
<CLR Via C#>第三版 P489 在using内部抛出了异常,被using的对象还是会被释放掉. Using编译时会自动生成Try Finally代码块. 同样Using只能用于实 ...
- (08)-Python3之--类和对象
1.定义 类:类是抽象的,一类事物的共性的体现. 有共性的属性和行为. 对象:具体化,实例化.有具体的属性值,有具体做的行为. 一个类 对应N多个对象. 类包含属性以及方法. class 类名: 属 ...
- .NET, NETCORE 怎么写 "超时"代码,解析"超时"代码原理!
干货:本人不会长篇大论.能贴上去的,就是干货,能用一两句话讲明白的,不会大讲概念,不会浪费大家宝贵的时间. 前言:我们发现,超时是个非常重要的概念,如果在通讯架构中,没有超时的设计,那么这个通讯架构就 ...
- 我感兴趣的 .NET 开源项目
Gui.cs - 用于.NET 的控制台终端 UI 工具包 https://github.com/migueldeicaza/gui.cs Newtonsoft.Json - 高性能的 JSON 解析 ...
- JAD 反编译
自动拆装箱 对于基本类型和包装类型之间的转换,通过xxxValue()和valueOf()两个方法完成自动拆装箱,使用jad进行反编译可以看到该过程: public class Demo { publ ...