249442026-02-17 00:55:28999Maximális szorzat (50 pont)cpp17Hibás válasz 8/5063ms7448 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
#define int long long
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

int pow(int a, int b){
    if(b==0)return 1;
    if(b%2)return (pow(a,b-1)*a)%(int)(1e9+7);
    int x=pow(a,b/2);
    return (x*x)%(int)(1e9+7);
}

signed main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    int n,k,b;cin>>n>>k>>b;
    vector<int> neg,poz,null;
    for(int i = 0;i<n;i++){
        int a;cin>>a;
        if(a==0)null.push_back(a);
        else if(a>0)poz.push_back(a);
        else neg.push_back(a);
    }
    sort(neg.begin(),neg.end());
    sort(poz.rbegin(),poz.rend());
    int sum=0,ans=1;
    for(int i = neg.size()-1;i>=0;i--){
        if(i>=b)sum+=-neg[i];
        else ans=(ans*neg[i])%(int)(1e9+7);
    }
    if(sum>k||neg.size()<b){
        cout<<-1<<endl;
        return 0;
    }
    k-=sum;
    if(null.size()+neg.size()-b>k){
        cout<<0<<endl;
        return 0;
    }
    k-=(null.size()+neg.size()-b);
    for(int i = 0;i<null.size()+neg.size()-b;i++){
        poz.push_back(1);
    }
    int currn=poz[0],currdb=1;
    set<pair<int,int>> s;
    for(int i = 1;i<poz.size();i++){
        if(currn!=poz[i]){
            s.insert({currn,currdb});
            currn=poz[i];
            currdb=1;
        }
        else currdb++;
    }
    s.insert({currn,currdb});
    //for(auto[a,b]:s)cout<<a<<' '<<b<<endl;
    while(k>0){
        auto [A,B]=*s.begin();
        if(B<=k){
            s.erase({A,B});
            pair<int,int> i=*s.lower_bound({A+1,0});
            s.erase({i});
            s.insert({A+1,B+i.second});
            k-=B;
        }
        else{
            s.erase({A,B});
            pair<int,int> i=*s.lower_bound({A+1,0});
            s.erase({i});
            s.insert({A+1,k+i.second});
            s.insert({A,B-k});
            break;
        }
    }
    //for(auto [a,b]:s)cout<<a<<' '<<b<<endl;
    for(auto i : s)ans=(ans*pow(i.first,i.second))%(int)(1e9+7);
    cout<<ans<<endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base8/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Hibás válasz0/01ms508 KiB
4Elfogadva0/01ms316 KiB
5Elfogadva0/03ms564 KiB
6Hibás válasz0/21ms316 KiB
7Hibás válasz0/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Hibás válasz0/21ms316 KiB
10Hibás válasz0/26ms1076 KiB
11Hibás válasz0/261ms7448 KiB
12Hibás válasz0/163ms7320 KiB
13Hibás válasz0/11ms508 KiB
14Hibás válasz0/14ms632 KiB
15Elfogadva1/112ms964 KiB
16Hibás válasz0/114ms1284 KiB
17Elfogadva1/112ms948 KiB
18Elfogadva1/14ms908 KiB
19Futási hiba0/123ms1456 KiB
20Futási hiba0/117ms1360 KiB
21Futási hiba0/128ms1640 KiB
22Futási hiba0/114ms1456 KiB
23Hibás válasz0/143ms4152 KiB
24Hibás válasz0/159ms6732 KiB
25Hibás válasz0/21ms500 KiB
26Hibás válasz0/23ms564 KiB
27Futási hiba0/214ms1012 KiB
28Futási hiba0/114ms948 KiB
29Elfogadva2/212ms1012 KiB
30Hibás válasz0/128ms1580 KiB
31Elfogadva1/123ms1456 KiB
32Hibás válasz0/21ms316 KiB
33Hibás válasz0/228ms1428 KiB
34Hibás válasz0/128ms1460 KiB
35Hibás válasz0/228ms1456 KiB
36Hibás válasz0/228ms1496 KiB
37Hibás válasz0/228ms1456 KiB
38Hibás válasz0/228ms1456 KiB
39Hibás válasz0/11ms316 KiB