제출 #1333819

#제출 시각아이디문제언어결과실행 시간메모리
1333819justin271828IMO (EGOI25_imo)C++20
0 / 100
1302 ms432 KiB
#include <bits/stdc++.h>
using namespace std;

#define ii pair<int, int>
#define f first
#define s second

int main() {
  int N, M, K;
  cin >> N >> M >> K;
  int a[N][M];
  ii rank[N];
  for (int i = 0; i < N; i++) {
    int sum = 0;
    for (int j = 0; j < M; j++) {
      cin >> a[i][j];
      sum += a[i][j];}
    rank[i] = {sum, i};
  }
  sort(rank, rank+N);
  for (ii p: rank) {
    cout << p.f << " " << p.s << "\n";
  }
  int ans = 1234567890;
  for (int k = 0; k < 1<<(N*M); k++) {
    int mini[N];
    int maxi[N];
    int temp = 0;
    memset(mini, 0, sizeof(mini));
    memset(maxi, 0, sizeof(maxi));
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < M; j++) {
        if (k & (1<<(j+M*i))) {
          mini[i] += a[i][j];
          maxi[i] += a[i][j];
          temp += 1;
        }
        else maxi[i] += K;
    }}
    bool b = true;
    for (int i = 1; i < N; i++) {
      int A = rank[i].s;
      int B = rank[i-1].s;  
      if (A > B) b = b && (mini[A] > maxi[B]);
      else b = b && (mini[A] >= maxi[B]);
    }
    if (!b) continue;
    ans = min(temp, ans);
  }
  cout << ans;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...