首页 > 其他 > 详细

Codeforces 382C Arithmetic Progression(排序+分类)

时间:2014-02-03 13:37:59      阅读:402      评论:0      收藏:0      [点我收藏+]

题目链接:Codeforces 382C Arithmetic Progression


题目大意:给出一个长度为n的序列,表示有n张卡片,上面的数字,现在还有一张卡片,上面没有数字,问说可以写几种数字在这张卡片上面,使得n+1张卡片上的数字可以排列成一个等差数列,有无限多种时输出-1.


解题思路:分类,n为1、2、3、3+,四种,注意相同的数字算一种。


#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
#include <set>

using namespace std;
const int N = 100005;

int n, a[N];
struct state {
	int k, v;
};

void init () {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	sort(a, a + n);
}

void solve () {
	set<int> ans;
	if (n == 2) {
		int d = a[1] - a[0];
	    ans.insert(a[0]-d); ans.insert(a[1]+d);
		if (d % 2 == 0) ans.insert(a[1]-d/2);
	} else if (n == 3) {
		int d1 = a[1] - a[0], d2 = a[2] - a[1];
		if (d1 == d2) { ans.insert(a[0]-d1); ans.insert(a[2]+d1); }
		else {
			if (d1 == d2 * 2) {
				ans.insert(a[0] + d2);
			} else if (d2 == d1 * 2) {
				ans.insert(a[1] + d1);
			}
		}
	} else {
		int cnt = 0, d[10];
		map<int, int> g;

		for (int i = 1; i < n; i++) {
			int k = a[i] - a[i-1];
			g[k]++;
			if (g[k] == 1) {
				d[cnt++] = k;
				if (cnt >= 3) break;
			}
		}

		if (cnt == 1) {
			ans.insert(a[0]-d[0]); ans.insert(a[n-1]+d[0]);
		} else if (cnt == 2 && g[d[0]] == 1 && d[0] == 2 * d[1]) {
			for (int i = 1; i < n; i++) if (a[i] - a[i-1] == d[0]) {
				ans.insert(a[i]-d[1]); break;
			}
		} else if (cnt == 2 && g[d[1]] == 1 && d[1] == 2 * d[0]) {
			for (int i = 1; i < n; i++) if (a[i] - a[i-1] == d[1]) {
				ans.insert(a[i]-d[0]); break;
			}
		}
	}

	bool flag = false;
	printf("%lu\n", ans.size());
	for (set<int>::iterator i = ans.begin(); i != ans.end(); i++) {
		if (flag) printf(" ");
		printf("%d", *i); flag = true;
	}
	if (ans.size()) printf("\n");
}

int main () {
	init();
	if (n == 1) printf("-1\n");
	else solve();
	return 0;
}


Codeforces 382C Arithmetic Progression(排序+分类)

原文:http://blog.csdn.net/keshuai19940722/article/details/18900349

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!