坑了许久的热身赛#4G题, 当时貌似是精度有问题
题意是给定A序列, 求满足条件的B序列个数
B序列非严格单调增并且对于对所有i成立:B[i]+B[i+1]=A[i]
可求得B序列相邻两项之差组成的序列C
C随奇偶可分为单调增长项和减小项, 将B[0]初始化为0后依次得到增长项的最大值和减小项的最小值, 两者取整后之差即为序列个数.
注意序列个数不能为负
/*author: birdstorm*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <climits>
#include <algorithm>
#define MAXN 100005
#define N 105
#define inf 1.0e20
#define eps 1.0e-10
#define MOD 1000000007
#define For(i,m,n) for(int i=(m);i<(n);i++)
#define vecfor(iter,a) for(vector<int>::iterator iter=a.begin();iter!=a.end();iter++)
#define rep(i,m,n) for(int i=(m);i<=(n);i++)
#define LL long long
using namespace std;
int x, bp, bn;
int main()
{
int n, T;
scanf("%d",&T);
while(T--){
double l=-1.0e20, r=1.0e20;
scanf("%d",&n);
bp=0;
rep(i,1,n){
scanf("%d",&x);
bn=x-bp;
if(i&1) r=min(r,(bn-bp)*0.5);
else l=max(l,(bp-bn)*0.5);
bp=bn;
}
if(l>r) puts("0");
else printf("%.0lf\n",floor(r)-ceil(l)+1);
}
return 0;
}