제출 #1232933

#제출 시각아이디문제언어결과실행 시간메모리
1232933tfgsAliens (IOI16_aliens)C++17
0 / 100
9 ms440 KiB
#include "aliens.h"
#include <bits/stdc++.h>
#define ll long long
using namespace std;

long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) {
    for(int i = 0; i < n; i++){
        if(r[i] > c[i]){
            swap(r[i], c[i]);
        }
    }
    ll lim [m];
    for(int i = 0; i < m; i++){
        lim[i] = i+1;
    }
    for(int i = 0; i < n; i++){
        lim[c[i]] = min(lim[c[i]], (ll)(r[i]));
    }
    for(int i = m-2; i >= 0; i--){
        lim[i] = min(lim[i+1], lim[i]);  
    }
    ll lo = 0;
    ll hi = (1ll << 30);
    while(lo != hi){
        ll mid = (lo + hi)/2;
        pair<ll,int> dp [m+1];
        for(int i = 0; i <= m; i++){
            dp[i] = make_pair((1ll << 60), 0);
        }
        dp[0] = make_pair(0, 0);
        for(ll i = 0; i < m; i++){
            if(lim[i] == i+1){
                if(dp[i+1] > dp[i]){
                    dp[i+1] = dp[i];
                }
            }else{
                for(ll l = i+1; l <= m; l++){
                    if(dp[l] > make_pair(dp[i].first + (l - lim[i]) * (l - lim[i]) + mid, dp[i].second + 1)){
                        dp[l] = make_pair(dp[i].first + (l - lim[i]) * (l - lim[i]) + mid, dp[i].second + 1); 
                    }
                }
            }
        }
        if(dp[m].second <= k){
            hi = mid;
        }else{
            lo = mid+1;
        }
    }

    {
        ll mid = lo;
        pair<ll,int> dp [m+1];
        for(int i = 0; i <= m; i++){
            dp[i] = make_pair((1ll << 60), 0);
        }
        dp[0] = make_pair(0, 0);
        for(int i = 0; i < m; i++){
            if(lim[i] == i+1){
                if(dp[i+1] > dp[i]){
                    dp[i+1] = dp[i];
                }
            }else{
                for(int l = i+1; l <= m; l++){
                    if(dp[l] > make_pair(dp[i].first + (l - lim[i]) * (l - lim[i]) + mid, dp[i].second + 1)){
                        dp[l] = make_pair(dp[i].first + (l - lim[i]) * (l - lim[i]) + mid, dp[i].second + 1); 
                    }
                }
            }
        }
        return dp[m].first - mid * dp[m].second;
    }
}

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