Submission #1297901

#TimeUsernameProblemLanguageResultExecution timeMemory
1297901_the_lost_coderOlympiads (BOI19_olympiads)C++20
0 / 100
1 ms576 KiB
#include<bits/stdc++.h>
using namespace std;
// #include "debug_header.h"    
#define int long long
#define ll long long

int mi;
int num;
int K;
int tot;
int C;
vector<vector<int>>v;
vector<vector<int>>x;
void dfs(int pos,int curr,int id){
    if(curr<mi || num==C)return;
    num++;
    if(id+1<v[pos].size())dfs(pos,curr+v[pos][id+1]-v[pos][id],id+1);
    for(int i=pos+1;i<v.size();i++){
        int cu = curr+v[i][1]-v[i][0];
        if(cu<mi || num==C)
            break;
        dfs(i,cu,1);
    }
}


void get(){
    num=0;
    dfs(0,tot,0);
}

int32_t main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    // freopen("roboherd.in", "r", stdin);
	// freopen("roboherd.out", "w", stdout);
    int N;
    cin>>N;
    cin>>K;
    cin>>C;
    for(int i=0;i<N;i++){
        vector<int>p(K);
        for(int &x:p){
            cin>>x;
        }
        x.push_back(p);
    }
    for(int j=0;j<K;j++){
        vector<int>te;
        for(int i=0;i<N;i++){
            te.push_back(x[i][j]);
        }
        sort(te.begin(),te.end(),greater<int>());
        tot+=te[0];
        v.push_back(te);
    }
    
    sort(v.begin(), v.end(), [](const vector<int>& a, const vector<int>& b){
        return a[1] > b[1];  
    });
    int lo=0;
    int hi=1e13+11;
    while(lo<=hi){
        mi=(lo+hi)/2;
        get();
        if(num<C) hi=mi-1;
        else lo=mi+1;
    }
    cout<<(hi)<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...