Koder / 박성훈
article thumbnail

파라메트릭 서치는 몇번을 해도 ㄹㅇ 이 뇌절을 막을수가 없음

어떻게하는지 아직도 잘 ㅁㄹ겠다.

 

https://www.acmicpc.net/problem/2343

 

2343번: 기타 레슨

강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경

www.acmicpc.net

블루레이의 녹화 가능한 길이에 따라서 True/False 여부가 갈리는

이분탐색 문제였다.

M개로 쪼개는건 그냥 나이브하게 O(N) 에 처리가능.

파라메트릭이 상수가 많이붙어서그렇지 O(log1e9) 상수시간에 처리가 되고있는데

TLE를 받진 않을거같다.

 

더보기

 

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

ll n,m;
ll arr[123456] = {0};

ll search(ll s, ll e){
	ll mid = (s+e)/2;
	if(s>e) return s;
	
	ll cnt = 0;
	ll tmp = 0;
	for(int i=0; i<n; i++){
		tmp += arr[i];
		if(mid < tmp){
			tmp = 0;
			i--;
			cnt++;
		}
	}
	
	if(cnt < m) return search(s,mid-1);
	else        return search(mid+1,e);
}

int main(){
	cin >> n >> m;
	
	ll maxv = -1;
	for(int i=0; i<n; i++){
		cin >> arr[i];
		maxv = max(maxv, arr[i]);
	}
	cout << search(maxv, 1e9);
	return 0;
}

진짜 매번 한결같이

파라메트릭은 종료조건 (s>e) 짜는거랑

s, mid 로 할지

s, mid-1 로 할지

이거두개에서 맨날 뇌절침

틀리길래 무지성으로 long long 박았는데

오버플로우가 일어나고있는지는 잘 모르겠다.

반응형