166462025-05-07 18:06:23sztomiMaximális szorzat (50 pont)cpp17Futási hiba 43/5089ms1032 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, k, b;
    cin >> n >> k >> b;
    vector<int> poz;
    vector<int> neg;
    int temp;
    for(int i = 0; i < n; i++){
        cin >> temp;
        if(temp >= 0){
            poz.push_back(temp);
        }
        else if(temp < 0){
            neg.push_back(temp);
        }
    }
    sort(neg.begin(), neg.end(), greater<int>());


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

    int kell = neg.size()-b;
    int elhasznal = 0;
    for(int i = 0; i < kell; i++){
        elhasznal += -neg[i];
        poz.push_back(0);
    }

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

    sort(poz.begin(), poz.end());
    int elozo = 0;
    int meddig = 0;
    int feltolt = 0;
    for(int i = 1; i < poz.size(); i++){
        elozo = elozo + (poz[i]-poz[i-1])*i;
        if(elozo <= k){
            meddig = i;
            feltolt = elozo;
        }
        else{
            break;
        }
    }

    k -= feltolt;
    int also_db = meddig+1;
    int also = poz[meddig];

    //cout << "also: " << also << " also_db: " <<also_db << " " << k << "\n";

    //cout << "also_db " << also_db << " k " << k << "\n";
    int osszes_novel = k / also_db;
    also += osszes_novel;
    k -= osszes_novel*also_db;
    //cout << "osszes_novel " << osszes_novel << "\n";

    also_db -= k;
    long long ret = 1;
    long long mod = 1e9 + 7;
    //cout << "vegso alsodb " << also_db << " " << also << "\n";
    for(int i = 0; i < also_db; i++){
        ret *= also;
        ret %= mod;
    }
    for(int i = 0; i < k; i++){
        ret *= (also + 1);
        ret %= mod;
    }

    for(int i = also_db+k; i < poz.size(); i++){
        ret *= poz[i];
        ret %= mod;
    }

    for(int i = neg.size()-b; i < neg.size(); i++){
        ret *= abs(neg[i]);
        ret %= mod;
        //cout << "raszoroz " << neg[i] << "\n";
    }
    cout << ret << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base43/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/01ms316 KiB
4Elfogadva0/01ms316 KiB
5Elfogadva0/04ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms508 KiB
10Elfogadva2/24ms500 KiB
11Elfogadva2/252ms812 KiB
12Elfogadva1/154ms1012 KiB
13Elfogadva1/11ms316 KiB
14Elfogadva1/14ms316 KiB
15Elfogadva1/117ms628 KiB
16Elfogadva1/121ms792 KiB
17Elfogadva1/120ms684 KiB
18Elfogadva1/110ms720 KiB
19Futási hiba0/141ms1032 KiB
20Futási hiba0/129ms944 KiB
21Futási hiba0/157ms972 KiB
22Futási hiba0/124ms968 KiB
23Elfogadva1/157ms888 KiB
24Elfogadva1/156ms884 KiB
25Elfogadva2/21ms316 KiB
26Elfogadva2/24ms316 KiB
27Futási hiba0/228ms772 KiB
28Futási hiba0/128ms672 KiB
29Elfogadva2/221ms684 KiB
30Elfogadva1/159ms944 KiB
31Elfogadva1/132ms944 KiB
32Elfogadva2/21ms508 KiB
33Elfogadva2/259ms960 KiB
34Elfogadva1/159ms992 KiB
35Elfogadva2/257ms944 KiB
36Elfogadva2/259ms940 KiB
37Elfogadva2/259ms944 KiB
38Elfogadva2/289ms896 KiB
39Elfogadva1/11ms316 KiB