152852025-02-18 08:35:44AblablablaMaximális szorzat (50 pont)cpp17Elfogadva 50/5061ms1260 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll MOD = 1e9 + 7;

int main()
{
    ll n, m, b;
    cin >> n >> m >> b;

    vector<ll> alap(n);
    ll van = 0;
    for(ll &x : alap){
        cin >> x;
        van += (x < 0);
    }

    if(van < b){
        cout << "-1\n";
        return 0;
    }

    sort(alap.begin(), alap.end());

    if(b == n){
        ll sum = 0;
        for(int x : alap){
            sum += (-1ll - x);
        }

        if(sum < m){
            cout << "-1\n";
            return 0;
        }


        ll l = -1e9, r = -1;
        ll val = 1;
        ll mar = 0;

        while(l <= r){
            ll k = (l + r) / 2;

            ll ossz = 0;
            for(ll i = 0; i < n; i++){
                ossz += max(0ll, k - alap[i]);

                if(ossz > m) break;
            }

            if(ossz <= m){
                val = k;
                mar = m - ossz;
                l = k + 1;
            } else{
                r = k - 1;
            }
        }

        if(val == 1){
            cout << "-1\n";
            return 0;
        }

        for(ll &x : alap){
            x = max(x, val);

            if(mar > 0){
                x++;
                mar--;
            }
        }








    } else{
        ll l = 0, r = 1e9 + 2e5;
        ll val = -1;
        ll mar = 0;

        while(l <= r){
            ll k = (l + r) / 2;

            ll ossz = 0;
            for(ll i = b; i < n; i++){
                ossz += max(0ll, k - alap[i]);

                if(ossz > m) break;
            }

            if(ossz <= m){
                val = k;
                mar = m - ossz;
                l = k + 1;
            } else{
                r = k - 1;
            }
        }

        if(val == -1){
            cout << "-1\n";
            return 0;
        }

        for(ll i = b; i < n; i++){
            alap[i] = max(alap[i], val);
            if(mar > 0){
                alap[i]++;
                mar--;
            }
        }
    }

    ll ans = 1;
    for(ll x : alap){
        x %= MOD;

        ans *= x;
        ans %= MOD;
    }

    cout << ans << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/01ms500 KiB
4Elfogadva0/01ms316 KiB
5Elfogadva0/04ms480 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms508 KiB
10Elfogadva2/24ms508 KiB
11Elfogadva2/254ms1188 KiB
12Elfogadva1/157ms1076 KiB
13Elfogadva1/12ms316 KiB
14Elfogadva1/14ms316 KiB
15Elfogadva1/120ms564 KiB
16Elfogadva1/121ms804 KiB
17Elfogadva1/120ms808 KiB
18Elfogadva1/110ms804 KiB
19Elfogadva1/145ms1076 KiB
20Elfogadva1/134ms1076 KiB
21Elfogadva1/161ms1188 KiB
22Elfogadva1/124ms1076 KiB
23Elfogadva1/159ms1076 KiB
24Elfogadva1/157ms1260 KiB
25Elfogadva2/21ms316 KiB
26Elfogadva2/24ms364 KiB
27Elfogadva2/230ms800 KiB
28Elfogadva1/130ms564 KiB
29Elfogadva2/218ms564 KiB
30Elfogadva1/159ms1260 KiB
31Elfogadva1/143ms1192 KiB
32Elfogadva2/21ms316 KiB
33Elfogadva2/259ms1076 KiB
34Elfogadva1/159ms1188 KiB
35Elfogadva2/259ms1076 KiB
36Elfogadva2/259ms1076 KiB
37Elfogadva2/259ms1076 KiB
38Elfogadva2/259ms1076 KiB
39Elfogadva1/11ms500 KiB