제출 #1352756

#제출 시각아이디문제언어결과실행 시간메모리
1352756ElayV13선물상자 (IOI15_boxes)C++20
35 / 100
1 ms344 KiB
#include "boxes.h"
#include "bits/stdc++.h"
using namespace std;

#define ll long long
const ll INF=1e18;

ll NC;
ll LC;
ll KC;

ll cost(ll a,ll b){
      return min(abs(a-b),abs(max(a,b)-(min(a,b)+LC)));
}

ll C(vector<int>per){
      ll NN=(ll)per.size();
      ll res=0;
      for(int i=0;i<NN;i+=KC){
            int l=i,r=min(NN-1,i+KC-1);
            int cur=0;
            for(int j=l;j<=r;j++){
                  res+=cost(cur,per[j]);
                  cur=per[j];
            }
            res+=cost(0,cur);
      }
      return res;
}

ll delivery(int N,int K,int L,int p[])
{
      NC=N;
      LC=L;
      KC=K;
      ll ans=INF;
      vector<int>pos1;
      vector<int>pos2;
      for(int i=0;i<N;i++) pos1.push_back(p[i]);
      for(int i=N-1;i>=0;i--) pos2.push_back(p[i]);
      ans=min(ans,C(pos1));
      ans=min(ans,C(pos2));
      for(int i=max(0,N/2-50);i<min(N-1,N/2+50);i++){
            vector<int>p1,p2;
            for(int j=0;j<=i;j++) p1.push_back(p[j]);
            for(int j=i+1;j<N;j++) p2.push_back(p[j]);
            ans=min(ans,C(p1)+C(p2));
      }
      return ans;
}
#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...