제출 #1365916

#제출 시각아이디문제언어결과실행 시간메모리
1365916thelegendary08선물상자 (IOI15_boxes)C++17
70 / 100
2098 ms171152 KiB
#include "boxes.h"
#include<bits/stdc++.h>
#define int long long
#define vi vector<int> 
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std; 
int L;
inline int dis(int a, int b){return min(abs(b-a), L - abs(b-a));}
long long delivery(signed N, signed K, signed L, signed pos[]) {
	::L=L; vi dp(N, 4e18); multiset<int>s; s.insert(dis(0,pos[0]) - pos[0]); 
	f0r(i,N){
		// for(int j = i; j >= max(0LL, i-K+1); j--){
			// if(j == 0)dp[i] = min(dp[i], dis(0, pos[0]) + dis(0, pos[i]) + pos[i] - pos[0]); 
			// else dp[i] = min(dp[i], dp[j-1] + dis(0, pos[i]) + dis(0, pos[j]) + pos[i] - pos[j]); 
		// }
		dp[i] = (*s.begin()) + dis(0, pos[i]) + pos[i]; 
		s.insert(dp[i] + dis(0, pos[i+1]) - pos[i+1]); 
		if(i-K+1 >= 0){
			int d = i - K + 1; if(d == 0)s.erase(s.find(dis(0,pos[d]) - pos[d])); else s.erase(s.find(dp[d-1] + dis(0,pos[d]) - pos[d]));
		}
	} return dp[N-1]; 
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…