BZOJ 1811 IOI 2005 mea 乱搞

来源:互联网 发布:php竞猜源码 编辑:程序博客网 时间:2024/04/26 06:47

题目大意:给出一个序列中相邻两个的平均值,问有多少个序列可以满足这个性质。


思路:不难看出,只要确定了任意一个数字,整个序列就是确定的。我们设第一个值为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 0x3f3f3f3fusing 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;}


0 0