英文网站建设多少钱,集客营销软件,惠州专业网站建设,企业管理软件排行榜洛谷题目链接
vjudge题目链接
Codeforces题目链接
分析
有序只跟相邻两个数有关所以只需考虑相邻的两个数。
接下来分类讨论#xff1a;
如果 a i a i 1 a_i a_{i1} aiai1#xff0c;如果要让 ∣ a i − x ∣ ≤ ∣ a i 1 − x ∣ | a_i-x| \le …洛谷题目链接
vjudge题目链接
Codeforces题目链接
分析
有序只跟相邻两个数有关所以只需考虑相邻的两个数。
接下来分类讨论
如果 a i a i 1 a_i a_{i1} aiai1如果要让 ∣ a i − x ∣ ≤ ∣ a i 1 − x ∣ | a_i-x| \le |a_{i1}-x| ∣ai−x∣≤∣ai1−x∣则 0 ≤ x ≤ ⌊ a i a i 1 ⌋ 2 0\le x\le\frac{\lfloor a_ia_{i1} \rfloor}{2} 0≤x≤2⌊aiai1⌋。如果 a i a i 1 a_i a_{i1} aiai1如果要让 ∣ a i − x ∣ ≤ ∣ a i 1 − x ∣ | a_i-x| \le |a_{i1}-x| ∣ai−x∣≤∣ai1−x∣则 x ≥ ⌈ a i a i 1 ⌉ 2 x\ge\frac{\lceil a_ia_{i1} \rceil}{2} x≥2⌈aiai1⌉。如果 a i a i 1 a_i a_{i1} aiai1无论 x x x 取何值都满足条件。所以 x x x 任取何值都可行。
然后遍历数组 a a a计算每个数的 x x x 的范围如果有交集则输出交集内任意一数否则无解。
代码
#include bits/stdc.husing namespace std;const int N 2 * 1e5 5;
int T, n, a[N]; int main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0); for(cin T; T; T --){cin n;int l 0, r 1e9;for(int i 1; i n; i ){cin a[i];}for(int i 1; i n; i ){if(a[i] a[i 1]){l max(l, (a[i] a[i 1] 1) / 2);}if(a[i] a[i 1]){r min(r, (a[i] a[i 1]) / 2);}}if(l r){cout -1\n;}else{cout l \n;}}return 0;
}