cf——C. Arithmetic Progression

2024-06-09 04:58
文章标签 cf arithmetic progression

本文主要是介绍cf——C. Arithmetic Progression,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Everybody knows what an arithmetic progression is. Let us remind you just in case that an arithmetic progression is such sequence of numbers a1, a2, ..., an of length n, that the following condition fulfills:

a2 - a1 = a3 - a2 = a4 - a3 = ... = ai + 1 - ai = ... = an - an - 1.

For example, sequences [1, 5], [10], [5, 4, 3] are arithmetic progressions and sequences [1, 3, 2], [1, 2, 4] are not.

Alexander has n cards containing integers. Arthur wants to give Alexander exactly one more card with a number so that he could use the resulting n + 1 cards to make an arithmetic progression (Alexander has to use all of his cards).

Arthur has already bought a card but he hasn't written a number on it. Help him, print all integers that you can write on a card so that the described condition fulfilled.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of cards. The next line contains the sequence of integers — the numbers on Alexander's cards. The numbers are positive integers, each of them doesn't exceed 108.

Output

If Arthur can write infinitely many distinct integers on the card, print on a single line -1.

Otherwise, print on the first line the number of integers that suit you. In the second line, print the numbers in the increasing order. Note that the numbers in the answer can exceed 108 or even be negative (see test samples).

Sample test(s)
input
3
4 1 7
output
2
-2 10
input
1
10
output
-1
input
4
1 3 5 9
output
1
7
input
4
4 3 4 5
output
0
input
2
2 4
output
3
0 3 6
分类讨论,怎样成为一个等差数列
1.若n==0,输出0;
2.若n==1,输出-1;
3.若n==2&&a[0]==a[1],输出1,a[0];
4.若n==2&&a[0]!=a[1]&&(a[1]-a[0])%2==0,输出3,a[0]-d,a[0]+d/2,a[1]+d;
5.若n==2&&a[0]!=a[1]&&(a[1]-a[0])%2!=0,输出2,a[0]-d,a[1]+d;
5.若n>2&&d==0&&count==0,输出1,a[0];
6.若n>2&&d!=0&&count=1,(a[flag]-a[flag-1])%2==0,输出1,a[flag-1]+d;
7.若n>2&&d!=0&&count>1,输出0;
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[100005];
int main()
{int n;while(cin>>n){for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);if(n==1){cout<<"-1"<<endl;continue;}else if(n==0){cout<<"0"<<endl;continue;}else if(n==2){if(a[0]==a[1])cout<<"1\n"<<a[0]<<endl;else if((a[1]-a[0])%2==0){int d=a[1]-a[0];cout<<"3\n"<<a[0]-d<<" "<<d/2+a[0]<<" "<<a[1]+d<<endl;continue;}else{int d=a[1]-a[0];cout<<"2\n"<<a[0]-d<<" "<<a[1]+d<<endl;continue;}}else if(n>2){int flag=0;int d=9999999999;for(int i=1;i<n;i++){if(a[i]-a[i-1]<d)d=a[i]-a[i-1];}int count=0;for(int i=1;i<n;i++){if(a[i]-a[i-1]!=d){flag=i;count++;}}if(count==0&&d==0)cout<<"1\n"<<a[0]<<endl;else if(count==0&&d!=0)cout<<"2\n"<<a[0]-d<<" "<<a[n-1]+d<<endl;else if(count==1&&a[flag]-a[flag-1]==2*d)cout<<"1\n"<<a[flag-1]+d<<endl;elsecout<<"0\n";}}return 0;
}


这篇关于cf——C. Arithmetic Progression的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044278

相关文章

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

【CF】E. Anya and Cubes(双向DFS)

根据题意的话每次递归分3种情况 一共最多25个数,时间复杂度为3^25,太大了 我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果 之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以 时间复杂度降低为 3 ^ (n/2+1) 题目链接:http://codeforces.com/contest/525/problem/E #include<set

【CF】D. Arthur and Walls(BFS + 贪心)

D题 解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为. 一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断 题目链接:http://codeforces.com/contest/525/problem/D #include<cstdio>#include<

CF#271 (Div. 2) D.(dp)

D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/474/problem/D We s

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

CF#278 (Div. 2) A.(暴力枚举)

A. Giga Tower time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/A Giga To