题目大意:有一个单调不降整数序列,定义平均值数列为这个数列的相邻两项的平均值组成的序列,现在给定这个平均值序列,问原序列有多少种
这相当于给定了相邻两项之间的对称轴 那么我将这个数轴沿着这个对称轴折叠 相邻两项在数轴上就重合了
如果将整个数轴沿着所有的对称轴各折叠一次,所有的点就会重合于一点 此时所有对称轴组成的区间的交集大小就是解的数量
注意无解情况
500W的读入还真有人敢传。。。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 5005005 using namespace std; int n,L=-0x3f3f3f3f,R=0x3f3f3f3f,a[M]; int main() { int i,l=0,r=0; cin>>n; for(i=1;i<=n;i++) { scanf("%d",&a[i]); if(i&1) { r=l+(a[i]-a[i-1]); R=min(R,r); } else { l=r-(a[i]-a[i-1]); L=max(L,l); } } cout<<(L>R?0:R-L+1)<<endl; return 0; }
时间: 2025-01-23 20:46:21