제출 #239472

#제출 시각아이디문제언어결과실행 시간메모리
239472m3r8Aliens (IOI16_aliens)C++14
0 / 100
80 ms132088 KiB
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <utility>
//#include "aliens.h"


#define N 4040
#define K N
#define M 1001000
#define ll long long
#define ii std::pair<int,int>

ll dp[N][K];
ll over[N];
int line[M];
std::vector<ii> pt;

ll minl(ll a, ll b){
  if(a == -1)return b;  
  if(b == -1)return a;
  return a < b ? a:b;
};
ll take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c){
  memset(dp,-1,sizeof(dp));
  memset(over,0,sizeof(over));
  memset(line,0,sizeof(line));
  pt.clear();

  for(int i = 0;i<n;i++){
    if(r[i] >= c[i]){
      line[c[i]] = std::max(line[c[i]],r[i]-c[i]+1);
    }else if(r[i] < c[i]){
      line[r[i]] = std::max(line[r[i]],c[i]-r[i]+1);  
    };
  };

  for(int i = 0;i<m;i++){
    if(line[i])pt.push_back(ii(i,line[i]));  
  };

  for(int i = 1;i<pt.size();i++){
    if(over[i-1] > pt[i-1].second){
      over[i] = over[i-1] + pt[i-1].first - pt[i].first;  
    }else{
      over[i] = pt[i-1].second + pt[i-1].first - pt[i].first;
    };
  };

  for(int i = 0;i<=k;i++)dp[0][i] = 0;
  for(int i = 0;i<pt.size();i++){
    for(int j = 0;j<k;j++){
      if(dp[i][j] == -1)continue;
      ll mx = pt[i].second;
      for(int l = i+1;l<=pt.size();l++){
        dp[l][j+1] = minl(dp[l][j+1], dp[i][j] - over[i] * over[i] + mx * mx);  
        if(l < pt.size()){
          mx = std::max(mx, (ll)pt[l].second  + pt[l].first - pt[i].first);
        };
      };
    };  
  };
  ll mn = -1;
  for(int i = 0;i<=k;i++){
    mn = minl(mn,dp[pt.size()][i]);  
  };
  return mn;
};





컴파일 시 표준 에러 (stderr) 메시지

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:43:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 1;i<pt.size();i++){
                 ~^~~~~~~~~~
aliens.cpp:52:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0;i<pt.size();i++){
                 ~^~~~~~~~~~
aliens.cpp:56:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int l = i+1;l<=pt.size();l++){
                       ~^~~~~~~~~~~
aliens.cpp:58:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(l < pt.size()){
            ~~^~~~~~~~~~~
#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...