답안 #863096

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
863096 2023-10-19T15:19:33 Z Benmath Olympiads (BOI19_olympiads) C++14
31 / 100
842 ms 19380 KB

#include <bits/stdc++.h>
using namespace std; int niz[41][7];
int n, k , c;
int solve(vector<int>indeksi){
    int maxi[k];
    for(int i = 0; i < k; i++){
        maxi[i] = 0;
    }
    for(int i = 0; i < indeksi.size(); i++){
        int tren = indeksi[i];
        for(int j = 0; j < k; j++){
            maxi[j] = max(maxi[j], niz[tren][j]);
        }
    }
    int sum = 0;
    for(int i = 0; i < k; i++){
        sum = sum + maxi[i];
    }
    return sum;
}
int main(){

    cin >> n >> k >> c;
   
    for(int i = 0; i < n; i++){
        for(int j = 0; j < k; j++){
            cin >> niz[i][j];
        }
    }
int so = n / 2;
  vector<int>vector1[n + 1];
  vector<int>vector2[n + 1];
    for(int i = 0; i < so; i ++){
        for(int j = 0; j < k; j++){
            vector1[i].push_back(niz[i][j]);
        }
    }
    for(int i = so; i < n; i++){
        for(int j = 0; j < k; j++){
            vector2[i - so].push_back(niz[i][j]);
        }
       
    }
    int size1 = so;
    int size2 = n - so;
    vector<int>v1[k + 1];
    vector<int>v2[k + 1];
    vector<int>ans;
        for(int i = 0; i < (1<<size1); i++){   int brojac = 0;
            for(int j = 0; j < size1; j++){
             
                int res = i & (1<<j);
                if(res != 0){
                    brojac++;
                }
               
            }
            if(brojac <= k){
                v1[brojac].push_back(i);
            }
        }
     for(int i = 0; i < (1<<size2); i++){ int brojac = 0;
            for(int j = 0; j < size2; j++){
               
                int res = i & (1<<j);
                if(res != 0){
                    brojac++;
                }
               
            }
            if(brojac <= k){
                v2[brojac].push_back(i);
            }
        }
        for(int i = 0; i <= k; i++){
            int velicina = v1[i].size();
            for(int j = 0; j < velicina; j ++){
               vector<int>prvi_indeksi;
               int x = v1[i][j];
                for(int j1 = 0; j1 < size1; j1++){
               
                int res = x & (1<<j1);
                if(res != 0){
                   prvi_indeksi.push_back(j1);
                }
               
            }
            int velicina2 = v2[k - i].size();
            for(int t = 0; t < velicina2; t++){
                vector<int>indeksi = prvi_indeksi;
                int x = v2[k - i][t];
                  for(int j1 = 0; j1 < size2; j1++){
               
                int res = x & (1<<j1);
                if(res != 0){
                   indeksi.push_back(j1 + so);
                }
               
            }
            ans.push_back(solve(indeksi));
           
            }
           
            }
        }
sort(ans.begin(),ans.end());
int to = ans.size();
cout << ans[to - c];
   
}

Compilation message

olympiads.cpp: In function 'int solve(std::vector<int>)':
olympiads.cpp:11:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |     for(int i = 0; i < indeksi.size(); i++){
      |                    ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 830 ms 17708 KB Output is correct
2 Correct 825 ms 19172 KB Output is correct
3 Correct 842 ms 19380 KB Output is correct
4 Correct 817 ms 18080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 344 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -