题目大意:给出一个序列中相邻两个的平均值,问有多少个序列可以满足这个性质。
思路:不难看出,只要确定了任意一个数字,整个序列就是确定的。我们设第一个值为k,那么后面的值都可以用表达式表示。然后做一下差分,保证每一项>0,就可以确定k的范围,每一个k值对应一个序列。
CODE:
#define _CRT_SECURE_NO_DEPRECATE #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 5000010 #define INF 0x3f3f3f3f using namespace std; #define min(a,b) ((a) < (b) ? (a):(b)) #define max(a,b) ((a) > (b) ? (a):(b)) int cnt; int a[MAX],src[MAX]; int _min = -INF,_max = INF; int main() { cin >> cnt; for(int i = 1; i <= cnt; ++i) { scanf("%d",&a[i]); a[i] = a[i] * 2 - a[i - 1]; } for(int i = 1; i <= cnt; ++i) src[i] = a[i] - a[i - 1]; for(int i = 1; i <= cnt; ++i) { if(i&1) _max = min(_max,ceil((double)src[i] / 2)); else _min = max(_min,floor(-(double)src[i] / 2)); } cout << ((_max - _min) < 0 ? 0:(_max - _min + 1)) << endl; return 0; }
原文地址:http://blog.csdn.net/jiangyuze831/article/details/43016289