8 solutions

  • 0
    @ 2021-10-16 19:18:55

    题目解析:

    每次将最小的两个值进行处理直到剩下最后一个数,就是极大值;每次将最大的两个值进行处理直到剩下最后一个数,就是极小值。本题的关键是排序,将数组从小到大排序,取前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
    146
    Accepted
    52
    Uploaded By