Submission #1228407

#TimeUsernameProblemLanguageResultExecution timeMemory
1228407LucaIlieAliens (IOI16_aliens)C++20
25 / 100
2092 ms16836 KiB
#include "aliens.h"
#include <vector>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct interval {
    int l, r;
    bool operator < (interval a) {
        if (l == a.l)
            return r > a.r;
        return l < a.l;
    }
};

const int MAX_N = 5000;
const int MAX_K = 5000;
const long long INF = 1e18;
long long dp[MAX_N][MAX_K];
interval v[MAX_N + 1];

long long take_photos(int n, int m, int k, vector<int> R, vector<int> C) {
    vector<interval> rc(n);
    for (int i = 0; i < n; i++) {
        if (R[i] > C[i])
            swap(R[i], C[i]);
        C[i]++;
        rc[i] = {R[i], C[i]};
    }

    sort(rc.begin(), rc.end());

    n = 0;
    int maxR = -1;
    for (interval a: rc) {
        // printf("%d %d\n", a.l, a.r);
        if (a.r > maxR) {
            v[++n] = a;
            maxR = a.r;
        }
    }

    for (int i = 1; i <= n; i++)
        dp[i][0] = INF;
    for (int i = 1; i <= n; i++) {
        for (int l = 1; l <= k; l++) {
            dp[i][l] = INF;
            for (int j = 1; j <= i; j++) {
                long long len = (v[i].r - v[j].l);
                long long over = max(0, (v[j - 1].r - v[j].l));
                dp[i][l] = min(dp[i][l], dp[j - 1][l - 1] + len * len - over * over);
            }
            // printf("%d %d %lld\n", i, l, dp[i][l]);
        }
    }

    return dp[n][k];
}

Compilation message (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...