제출 #1151909

#제출 시각아이디문제언어결과실행 시간메모리
1151909alexddAliens (IOI16_aliens)C++20
0 / 100
0 ms324 KiB
#include "aliens.h" #include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; pair<int,int> v[100005],newv[100005]; long long take_photos(int32_t n, int32_t m, int32_t k, std::vector<int32_t> x, std::vector<int32_t> y) { for(int i=0;i<n;i++) { if(x[i] < y[i]) swap(x[i],y[i]); v[i+1] = {x[i],y[i]}; } sort(v+1,v+1+n); int newn=0; for(int i=1;i<=n;i++) if(i==1 || v[i]!=v[i-1]) newv[++newn] = v[i]; n = newn; for(int i=1;i<=n;i++) v[i] = newv[i]; newn=0; int cv=INF; for(int i=n;i>0;i--) { if(v[i].second < cv) { newv[++newn] = v[i]; cv = v[i].second; } } reverse(newv+1,newv+1+newn); n = newn; for(int i=1;i<=n;i++) v[i] = newv[i]; k = min(k, n); vector<vector<int>> dp(n+2,vector<int>(k+2,INF)); for(int j=0;j<=k;j++) dp[0][j]=0; for(int i=1;i<=n;i++) { for(int cnt=1;cnt<=k;cnt++) { for(int u=i-1;u>=0;u--) { if(v[u+1].second > v[u].first) { dp[i][cnt] = min(dp[i][cnt], dp[u][cnt-1] + v[u+1].second*v[u+1].second + 1 - 2*v[u+1].second * (v[i].first+1)); } else { dp[i][cnt] = min(dp[i][cnt], dp[u][cnt-1] + 2*v[u+1].second * (v[u].first+1) - v[u].first*(v[u].first+2) - 2*v[u+1].second * (v[i].first+1)); } } dp[i][cnt] += v[i].first*(v[i].first+2); } } int mnm=INF; for(int i=0;i<=k;i++) mnm = min(mnm, dp[n][i]); return mnm; } /* 5 7 2 0 3 4 4 4 6 4 5 4 6 output: 25 2 6 2 1 4 4 1 output: 16 */

컴파일 시 표준 에러 (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...