155382025-02-20 11:36:09MatematikaMaximális szorzat (50 pont)cpp17Elfogadva 50/5082ms2348 KiB
#include <bits/stdc++.h>

using namespace std;
#define int long long
const int MOD=1000000007;

signed main()
{
    int n,k,m,kezdes=-1,negativ=0,ossz=1; cin >> n >> k >> m;
    priority_queue<int, vector<int>, greater<int>> pq;
    vector<int> vec(n);
    for(auto& z:vec)
    {
        cin >> z;
        if(z<0)
            negativ++;
    }
    //cerr << negativ << "\n";
    if(m>negativ)
    {
        cout << "-1";
        return 0;
    }
    sort(vec.begin(),vec.end());
    for(int i=0; i<n && vec[i]<0; i++)
        kezdes=i;
    //cerr << kezdes << "\n";
    if(negativ==m && negativ==n)
    {
        for(auto& z:vec)
            if(z<-1)
                pq.push(z);
        while(k>0)
        {
            if(pq.empty())
            {
                cout << "-1";
                return 0;
            }
            int x=pq.top();
            //cerr << x << "\n";
            pq.pop();
            x++;
            if(x!=-1)
                pq.push(x);
            k--;
        }
        while(!pq.empty())
        {
            ossz*=pq.top();
            ossz%=MOD;
            pq.pop();
        }
        for(auto& z:vec)
            if(z>=0)
            {
                ossz*=z;
                ossz%=MOD;
            }
        cout << ossz;
        return 0;
    }
    else
    {
        for(int i=0; i<negativ-m; i++)
        {
            k+=vec[kezdes-i];
            vec[kezdes-i]=0;
        }
        /*for(auto z:vec)
            cerr << z << " ";*/
        if(k<0)
        {
            cout << "-1";
            return 0;
        }
        for(auto& z:vec)
            if(z>=0)
                pq.push(z);
        while(k>0 && !pq.empty())
        {
            int x=pq.top();
            //cerr << x << "\n";
            pq.pop();
            x++;
            pq.push(x);
            k--;
        }
        while(!pq.empty())
        {
            ossz*=pq.top();
            ossz%=MOD;
            pq.pop();
        }
        for(auto& z:vec)
            if(z<0)
            {
                ossz*=z;
                ossz%=MOD;
            }
        cout << ossz;
        return 0;
    }
}
/*4 2 4
-3 -1 -1 -1
*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/01ms316 KiB
4Elfogadva0/01ms316 KiB
5Elfogadva0/04ms564 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms316 KiB
10Elfogadva2/27ms568 KiB
11Elfogadva2/271ms2344 KiB
12Elfogadva1/178ms2340 KiB
13Elfogadva1/11ms316 KiB
14Elfogadva1/17ms584 KiB
15Elfogadva1/119ms564 KiB
16Elfogadva1/141ms1064 KiB
17Elfogadva1/120ms580 KiB
18Elfogadva1/112ms1444 KiB
19Elfogadva1/171ms2220 KiB
20Elfogadva1/157ms2348 KiB
21Elfogadva1/182ms2340 KiB
22Elfogadva1/126ms1836 KiB
23Elfogadva1/175ms1712 KiB
24Elfogadva1/178ms2340 KiB
25Elfogadva2/21ms316 KiB
26Elfogadva2/24ms316 KiB
27Elfogadva2/246ms1200 KiB
28Elfogadva1/146ms1436 KiB
29Elfogadva2/217ms800 KiB
30Elfogadva1/159ms1076 KiB
31Elfogadva1/141ms1140 KiB
32Elfogadva2/22ms316 KiB
33Elfogadva2/259ms1076 KiB
34Elfogadva1/161ms1196 KiB
35Elfogadva2/263ms1076 KiB
36Elfogadva2/261ms1076 KiB
37Elfogadva2/259ms1196 KiB
38Elfogadva2/259ms1076 KiB
39Elfogadva1/12ms316 KiB