p_ce1052   3년 전

코드가 좀 길어서 주석을 달았습니다

기본적인 아이디어는 입력받은 배열을 반으로 나누고 각각에 대해

(팀1의 점수 - 팀2의 점수 , 해당 차이를 만드는 선별 상태 비트마스킹 중 최솟값)  을 모두 구해놓고

배열 1과 배열 2에서 저 차이를 더해서 0에 최대한 가까워야 되므로

배열 1의 원소를 하나씩 보면서 (차이값 * -1) 한 값을 배열 2에서 이분탐색으로 찾습니다. 

상태 1과 상태 2를 하나로 합쳐서 (전체 차이, 상태) 를 만들고 최종적인 답과 비교하여 갱신해줍니다.

upper_bound로 찾았으므로 그 근방의 값을 1~2개 정도 더 고려해서 답을 갱신해줍니다. 

 

배열1의 원소에 첫 번째 원소부터 높은 비트를 부여하였고 팀 1이되면 비트를 켜지 않음, 팀2가 되면 해당 비트를 켬 으로 정하였습니다. 

 


snrnsidy   3년 전

4

50 50 50 1

30 30 30 150

답은 1 2 2 1가 출력이 되어야 합니다.

p_ce1052   3년 전

감사합니다 감사합니다 감사합니다

p_ce1052   3년 전

저 1 2 2 1 을 하면 두 팀간 차이가 9가 나오지 않나요? 제 코드는 1 1 1 2 를 출력하는데 이 경우 팀 차이는 0으로 이쪽이 팀 차이를 최소로 만드는 것에 더 부합하는게 아닌지

p_ce1052   3년 전

팀원 수가 같게 만들어야 되는군요... 가장 중요한 조건을 놓치고 문제를 풀고 있었네요.

댓글을 작성하려면 로그인해야 합니다.