제출 #1333690

#제출 시각아이디문제언어결과실행 시간메모리
1333690gelastropodIMO (EGOI25_imo)C++20
28 / 100
106 ms17304 KiB
#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
#define int long long

bool comp(pair<vector<int>, int>& a, pair<vector<int>, int>& b) {
    int sa = 0, sb = 0;
    for (int i : a.first) sa += i;
    for (int i : b.first) sb += i;
    if (sa == sb) return a.second > b.second;
    return sa < sb;
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int N, M, K, a, ans = 0; cin >> N >> M >> K;
    vector<pair<vector<int>, int>> A(N, pair<vector<int>, int>(vector<int>(M, 0), 0));
    vector<int> sums;
    for (int i = 0; i < N; i++) {
        A[i].second = i;
        int csum = 0;
        for (int j = 0; j < M; j++) {
            cin >> a;
            A[i].first[j] = a;
            csum += a;
        }
        sums.push_back(csum);
    }
    sort(A.begin(), A.end(), comp);
    sort(sums.begin(), sums.end());
    for (int i = 0; i < M; i++)
        ans += A[0].first[i] + (1 - A.back().first[i]);
    for (int i = 1; i < N; i++) {
        int s1 = 0, s2 = 0;
        for (int j = 0; j < M; j++) s1 += 1 - A[i - 1].first[j], s2 += A[i].first[j];
        ans += min(sums[i] - sums[i - 1] - (A[i].second > A[i - 1].second), s1 + s2);
    }
    cout << N * M - ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...