Sunday, March 16, 2014

Codeforces Round #224 (Div. 2) C Arithmetic Progression

//Codeforces Round #224 (Div. 2) C Arithmetic Progression
import java.io.*;
import java.math.*;
import java.util.*;

//Codeforces
public class MainCodeforces1 {
private static MyScanner in;
private static PrintStream out;
private static boolean LOCAL_TEST = false;

private static void solve() throws IOException
{
int n = in.nextInt();
int[] x = new int[n];
for (int i = 0; i < x.length; i++) {
x[i] = in.nextInt();
}
ArrayList<Integer> ansList = new ArrayList<Integer>();
if (n == 1) {
out.println(-1);
return;
}
else {
Arrays.sort(x);
int minDiff = Integer.MAX_VALUE;
if (n == 2) {
if ((x[1] - x[0]) % 2 == 0) {
minDiff = (x[1] - x[0]);
ansList.add(x[0] - minDiff);
if (minDiff > 0)
ansList.add(x[0] + minDiff / 2);
if (minDiff > 0)
ansList.add(x[1] + minDiff);
}
else {
minDiff = (x[1] - x[0]);
ansList.add(x[0] - minDiff);
ansList.add(x[1] + minDiff);
}
}
else {
HashSet<Integer> diffSet = new HashSet<Integer>();
for (int i = 1; i < x.length; i++) {
int diff = x[i] - x[i - 1];
diffSet.add(diff);
minDiff = Math.min(diff, minDiff);
}
if (diffSet.size() == 1) {
ansList.add(x[0] - minDiff);
if (minDiff > 0)
ansList.add(x[x.length - 1] + minDiff);
}
else if (diffSet.size() > 2) {
out.println(0);
return;
}
else {// if (diffSet.size() == 2) {
if (minDiff == 0) {
out.println(0);
return;
}

boolean added = false;
for (int i = 0; i < x.length - 1; i++) {
if (x[i + 1] - x[i] == minDiff)
continue;
else if (x[i + 1] - x[i] == 2 * minDiff) {
if (!added) {
ansList.add(x[i] + minDiff);
added = true;
}
else {
out.println(0);
return;
}
}
else {
out.println(0);
return;
}
}
}
}
}
out.println(ansList.size());
for (int i = 0; i < ansList.size(); i++) {
out.print(ansList.get(i));
out.print(" ");
}
}

public static void main(String[] args) throws IOException {
// helpers for input/output
out = System.out;
try {
String cname = System.getenv("COMPUTERNAME");
if (!cname.equals(""))
LOCAL_TEST = true;
} catch (Exception e) {
}
if (LOCAL_TEST) {
in = new MyScanner("E:\\zin.txt");
}
else {
boolean usingFileForIO = false;
if (usingFileForIO) {
// using input.txt and output.txt as I/O
in = new MyScanner("input.txt");
out = new PrintStream("output.txt");
}
else {
in = new MyScanner();
out = System.out;
}
}

solve();
}

// =====================================
static class MyScanner {
BufferedReader bufReader;
StringTokenizer strTok;

public MyScanner() throws IOException
{
bufReader = new BufferedReader(new InputStreamReader(System.in));
strTok = new StringTokenizer("");
}

public MyScanner(String inputFile) throws IOException {
bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(
inputFile)));
strTok = new StringTokenizer("");
}

String GetNextToken() throws IOException {
if (!strTok.hasMoreTokens())
strTok = new StringTokenizer(bufReader.readLine());
return strTok.nextToken();
}

public int nextInt() throws IOException {
return Integer.valueOf(GetNextToken());
}

public long nextLong() throws IOException {
return Long.valueOf(GetNextToken());
}

public double nextDouble() throws IOException {
return Double.valueOf(GetNextToken());
}

public String nextString() throws IOException {
return GetNextToken();
}

public String nextLine() throws IOException {
return bufReader.readLine();
}

public int countTokens() {
return strTok.countTokens();
}

public boolean hasMoreTokens() {
return strTok.hasMoreTokens();
}
}

}

No comments:

Post a Comment