8 solutions
-
0
题目解析:
每次将最小的两个值进行处理直到剩下最后一个数,就是极大值;每次将最大的两个值进行处理直到剩下最后一个数,就是极小值。本题的关键是排序,将数组从小到大排序,取前a[1]a[2]两个数进行处理,然后将新的值赋值到a[2],a[1]=0,再重新排序,0肯定在a[1],所以取a[2]a[3]处理,以此类推,直到只余下a[n]就是极大值。极小值的求法同理,只不过默认的是从小到大排序,所以求极小值时应该逆序取值,每次都取b[n]b[n-1]处理,直到只余下b[n]即极小值。
参考代码:
#include <bits/stdc++.h> using namespace std; const int N = 1e6; int a[N],b[N]; int main(){ int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = a[i]; } sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); for(int i = 1; i <= n - 1; i++) { a[i + 1] = a[i] * a[i + 1] + 1; a[i] = 0; sort(a + 1, a + n + 1); } for(int i = 1; i <= n - 1; i++) { int t = n; b[t - 1] = b[t] * b[t - 1] + 1; b[t] = 0; sort(b + 1, b + n + 1); } cout << a[n] - b[n]; return 0; }
Information
- ID
- 95
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 149
- Accepted
- 53
- Uploaded By