제출 #1255698

#제출 시각아이디문제언어결과실행 시간메모리
1255698allin27xAliens (IOI16_aliens)C++20
25 / 100
2093 ms94612 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; #define int long long #define _min(x,y) x = min(x,y) const int INF = 1e18; vector<vector<int>> dp; long long take_photos(signed n, signed m, signed k, std::vector<signed> rw, std::vector<signed> cl) { dp.assign(n+3, vector<int> (k+3, INF)); vector<array<int,3>> rgs(n); for (int i=0; i<n; i++){ int l = min(rw[i], cl[i]) + 1; int r = max(rw[i], cl[i]) + 1; rgs[i] = {l, r, 0}; } sort(rgs.begin(), rgs.end()); int lastr = -1; vector<array<int,3>> nrgs = {{0,0,0}}; for (int i=0; i<n; i++){ int l = rgs[i][0]; int r = rgs[i][1]; if (r <= lastr) continue; int area = (r-l+1)*(r-l+1); if (l <= lastr) area -= (lastr-l+1)*(lastr-l+1); lastr = r; nrgs.push_back({l, r, area}); } rgs = nrgs; for (int i=0; i<k+3; i++) dp[0][i] = 0; for (int i=1; i<rgs.size(); i++){ for (int nr = 1; nr <= k; nr++){ int totarea = 0; for (int lf = i; lf; lf--){ int add_ = rgs[i][1] - rgs[lf][0] + 1; add_*=add_; add_ -= totarea; add_ -= (rgs[lf][1] - rgs[lf][0] + 1) * (rgs[lf][1] - rgs[lf][0] + 1); _min(dp[i][nr], dp[lf-1][nr-1] + add_); totarea += rgs[lf][2]; } } for (int nr = 1; nr<=k; nr++) _min(dp[i][nr], dp[i][nr-1]); } int totarea = 0; for (int i=1; i<rgs.size(); i++) totarea += rgs[i][2]; return totarea + dp[rgs.size()-1][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...