제출 #1291426

#제출 시각아이디문제언어결과실행 시간메모리
1291426sahtehesap123Aliens (IOI16_aliens)C++20
25 / 100
167 ms2416 KiB
#include <bits/stdc++.h>
#include "aliens.h"
#define ll long long
using namespace std;

constexpr static ll INF = 1e15;

vector<array<int, 2>> get_cells(const vector<int>& r, const vector<int>& c) {
        const int n = r.size();
        vector<array<int, 2>> cells;
        for (int i = 0; i < n; i++) {
                cells.push_back({min(r[i], c[i]), -max(r[i], c[i])});
        }
        sort(cells.begin(), cells.end());
        vector<array<int, 2>> final_cells;
        int lastc = -1;
        for (auto [r, c] : cells) {
                if (-c <= lastc)
                        continue;
                lastc = -c;
                final_cells.push_back({r, -c});
        }
        return final_cells;
}

long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) {
        assert(n <= 510);
        vector<array<int, 2>> cells = get_cells(r, c);
        n = cells.size();
        // cout << k << "\n";
        vector<vector<ll>> dp(n+1, vector<ll>(k+1, INF));
        for (int i = 0; i <= k; i++) {
                dp[0][i] = 0;
        }
        for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= k; j++) {
                        ll maxc = 0;
                        ll minr = INF;
                        for (int l = i - 1; l >= 0; l--) {
                                minr = min<ll>(minr, cells[l][0]);
                                assert(minr == cells[l][0]);
                                maxc = max<ll>(maxc, cells[l][1]);
                                assert(maxc == cells[i-1][1]);
                                dp[i][j] = min(dp[i][j], 
                                                dp[l][j-1] 
                                                + (maxc - minr + 1) * (maxc - minr + 1)
                                                - ((l == 0) 
                                                        ? 0 
                                                        : max<ll>(0, (cells[l-1][1] - minr + 1)) * max<ll>(0, (cells[l-1][1] - minr + 1))
                                                )
                                );
                                //cout << i << " " << j << " " << l << " " << " " << maxc << " " << minr << "  " << dp[i][j] << "\n";
                        }
                }
        }
        /*
        for (auto [r, c] : cells) {
                cout << r << " " << c << "\n";
        }
        */
        return dp[n][k];
}

컴파일 시 표준 에러 (stderr) 메시지

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...