제출 #1284961

#제출 시각아이디문제언어결과실행 시간메모리
1284961Martincho506Aliens (IOI16_aliens)C++20
41 / 100
286 ms151368 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<assert.h>
using namespace std;

const long long MAXN = 1e4+7;
const long long INF = 1e18;
pair<long long, long long> tt[MAXN];
vector<pair<long long, long long> > a;
long long dp[MAXN][MAXN], opt[MAXN][MAXN], n, m;

bool cmp(pair<long long, long long> a1, pair<long long, long long> b1)
{
    if(a1.first < b1.first) return true;
    if(a1.first > b1.first) return false;
    if(a1.second > b1.second) return true;
    return false;
}

long long take_photos(int nn, int mm, int k, vector<int> r, vector<int> c)
{
    n = nn;
    m = mm;
    for(long long i = 1; i <= n; i++)
    {
        tt[i].first = min(c[i-1], r[i-1]);
        tt[i].second = max(c[i-1], r[i-1]);
    }
    sort(tt+1, tt+n+1, cmp);
    long long maxi = -1;
    for(long long i = 1; i <= n; i++)
    {
        if(tt[i].second > maxi)
        {
            maxi = tt[i].second;
            a.push_back(tt[i]);
        }
    }
    for(long long i = 0; i < a.size(); i++)
    {
        dp[i][1] = (a[i].second-a[0].first+1)*(a[i].second-a[0].first+1);
        opt[i][1] = 0;
    }
    for(long long i = 1; i <= k; i++)
    {
        //dp[a.size()][i] = (a[0].second-a[0].first+1)*(a[0].second-a[0].first+1);
        opt[a.size()][i] = a.size()-1;
    }
    for(long long i = 2; i <= k; i++)
    {
        for(long long j = a.size()-1; j >= 0; j--)
        {
            long long mini = INF, minii = -1;
            for(long long jj = opt[j][i-1]; jj <= opt[j+1][i]; jj++)
            {
                long long ss = max(0LL, a[jj].second-a[jj+1].first+1);
                if(dp[jj][i-1]+(a[j].second-a[jj+1].first+1)*(a[j].second-a[jj+1].first+1)-ss*ss < mini)
                {
                    mini = dp[jj][i-1]+(a[j].second-a[jj+1].first+1)*(a[j].second-a[jj+1].first+1)-ss*ss;
                    minii = jj;
                }
            }
            opt[j][i] = minii;
            dp[j][i] = mini;
        }
    }
    long long sz = a.size()-1;
    return dp[sz][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...