1 solutions
-
0
考虑用数组a储存温度
最小值:
当 w 比 a1 小最小的就是 a[n]−w。 当 w 比 an 大,那最小就为 w−a[1] 否则就是a[n]−a[1]
最大值:
必然是先吃 a[1] 或 a[n] 下一个是与第一个选择的距离更远的 a[2] 或 a[n−1],由于不知道先吃 a[1] 和 a[n]那个最大,所以都跑一边取最大
#include<bits/stdc++.h> using namespace std; #define int long long int a[100005]; int n , w; int minn(){ if(w<a[1]){ return a[n]-w; } else if(w>a[n]){ return w-a[1]; } else{ return a[n]-a[1]; } } int first() { int sum = 0; int now_w = w; int l = 1, r = n; for(int i = 1; i <= n; i++) { if(i % 2 == 1) { sum += max(abs(a[l] - now_w), abs(a[l] - w)); now_w = a[l]; l++; } else { sum += max(abs(a[r] - now_w), abs(a[r] - w)); now_w = a[r]; r--; } } return sum; } int last() { int sum = 0; int now_w = w; int l = 1, r = n; for(int i = 1; i <= n; i++) { if(i % 2 == 1) { sum += max(abs(a[r] - now_w), abs(a[r] - w)); now_w = a[r]; r--; } else { sum += max(abs(a[l] - now_w), abs(a[l] - w)); now_w = a[l]; l++; } } return sum; } signed main(){ cin>>n>>w; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); cout << minn() << " "; cout << max(first(),last()); }
- 1
Information
- ID
- 3827
- Time
- 2000ms
- Memory
- 250MiB
- Difficulty
- 5
- Tags
- # Submissions
- 131
- Accepted
- 28
- Uploaded By