166382025-05-07 17:46:53sztomiMaximális szorzat (50 pont)cpp17Hibás válasz 22/50600ms6316 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());
    map<int, int> dbok;
    for(int i = 0; i < poz.size(); i++){
        dbok[poz[i]]++;
    }

    int uj = 0;
    int kov;
    int also=dbok.begin()->first, also_db=dbok.begin()->second;
    //cout << "also " << also << "\n";
    auto it = dbok.begin();
    auto nxt = it;
    nxt++;
    for(; nxt != dbok.end(); it++, nxt++){
        kov = nxt->first;
        uj = (kov-also)*also_db;
        if(uj >= k){
            break;
        }
        k -= uj;
        also = nxt->first;
        also_db += nxt->second;
        //cout << uj << " " << kov << " feltolt " << also << " ig " << also_db << " db\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 << "\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 = 0; i < b; i++){
        ret *= abs(neg[i]);
        ret %= mod;
    }
    cout << ret << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base22/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/01ms316 KiB
4Elfogadva0/01ms508 KiB
5Hibás válasz0/04ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms500 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms316 KiB
10Elfogadva2/27ms820 KiB
11Elfogadva2/282ms6316 KiB
12Elfogadva1/186ms6316 KiB
13Hibás válasz0/11ms316 KiB
14Hibás válasz0/14ms564 KiB
15Elfogadva1/117ms972 KiB
16Hibás válasz0/124ms1200 KiB
17Elfogadva1/120ms1076 KiB
18Elfogadva1/110ms820 KiB
19Időlimit túllépés0/1600ms1476 KiB
20Időlimit túllépés0/1600ms1200 KiB
21Időlimit túllépés0/1598ms1800 KiB
22Időlimit túllépés0/1600ms1280 KiB
23Elfogadva1/171ms3952 KiB
24Elfogadva1/182ms5976 KiB
25Hibás válasz0/21ms316 KiB
26Hibás válasz0/24ms496 KiB
27Időlimit túllépés0/2600ms1256 KiB
28Időlimit túllépés0/1598ms1264 KiB
29Elfogadva2/221ms1076 KiB
30Hibás válasz0/159ms1940 KiB
31Elfogadva1/132ms1456 KiB
32Hibás válasz0/21ms508 KiB
33Hibás válasz0/259ms1964 KiB
34Elfogadva1/159ms1964 KiB
35Hibás válasz0/259ms1964 KiB
36Hibás válasz0/259ms1788 KiB
37Hibás válasz0/259ms1976 KiB
38Hibás válasz0/259ms1964 KiB
39Hibás válasz0/11ms316 KiB