P D 해적 다이아몬드가 높은 바다의 전리품에 온 훔친 전리품은 다음과 같은 전략에 합의
첫째, P 1 해적은 추첨으로 결정 - P.의 수를 이어서 적 1 호에 의해 제안 된 할당 방식 (각각의 프로그램에 대한 고유 번호가 공유 적 주어져야한다) 수득 될 수있는 경우를 포함 하나를 포함하는 절대 다수 (즉, 더 이상 반) 예, 프로그램이 할당에 따라 실행되고, 그것이 절대 다수 동의 프로그램이 함께 제공 얻을 수있을 때까지 3 번 등 해적에 다음 유사하게 제 2 호에 의해 제안 될 다음에, 또는 그 독점적 만 해적,있다, 그렇지 않으면, 1 위는 공급 상어를 바다에 투입 될 것입니다 모든 다이아몬드. 해적의 자신의 주에서 다이아몬드 할당 1 위의 번호가 부여하는 프로그램을 작성합니다.
이 세 가지 가정을 함께 제공 :
- "스마트"와 "탐욕은"가정 : 항상 행동 규범으로 자신의 이익을 극대화 할 수있는 각각의 해적;
- "인류는"가정 : 경우에 많은 다이아몬드로 얻을 수있는, 의도적으로 죽음에 공범이 발생하지 않는 해적;
- 해적, 해적들 사이에 개인적인 원한이 없습니다 및 우선 순위 원칙의 다른 다이아몬드 적은 수의 순서를 제공합니다 : "편견"는 것으로 가정합니다.
입력 형식 :
D 입력은 두 양의 정수를 부여하고, P (행 3 ≦ P ≦ D ≦ 100).
출력 형식 :
다이아몬드의 수는 1 위 해적 다이아몬드 출력 할당의 점유율을 소유하고 있습니다.
샘플 입력 :
10 7
샘플 출력 :
6
그것은 제목의 게임을 추측하기 쉽지만, 경기 업의 열쇠입니다, 그래서 단지 가능한 한 그에게주고, 게임이 약하지만, 다행히 세 가정이 질문은, 각각의 해적 행위의 내 코드에 대한 혜택을 극대화, 그는 죽음에 당신을 치료하지 않을 것이다, 당신을 지원합니다. 모든 솔루션은, 제목에 대한 샘플을 채취, 위의 한 후 프로그램을 기초로 구축
에만 7 번 사람이 반드시 가장 좋은 방법은 자신의 다이아몬드의 모든 10을 얻을 경우,
경우 6, 7 나머지, 7 호, 6 0, 7, 6, 중단됩니다 충족되지 않는 한 번호를 모두 얻을 수 있습니다
그것은 자신의 불멸을 보장하면서 최대의 효과를 얻기 위해, 5 번 프로그램을 경우, 그는 6 번 틴틴 혜택을 제공 할 필요가 그에게 하나를주고 그, 그는 5를 지원하는 것입니다, 당신은 좋은보다 더 얻을 수없는,
같은, 그들에 숫자 5를 기준으로이 사람들의 많은 양에 어떤 사람을 그리는 4 필요성을 제 자신을 지원
해결하기 위해 우선 순위 큐 여기.
코드 :
#INCLUDE <cstdio> #INCLUDE <iostream> #INCLUDE <큐> 사용 공간을 성병; INT D, P; INT의 V [ 101 ]; 구조체 CMP { 부울 연산자 () ( CONST INT & A CONST INT 및 b) CONST { 복귀 V [A]> V [B] } }; int로 주 () { 는 scanf를 ( " % D % D ' , D, P); priority_queue < INT 벡터 < INT> CMP> Q; V [P] = D; q.push (p); q.push (p - 1 ); int로하지 아니 = P를 - 2 ; 반면 (NO> 0 ) { INT NUM = 1 , C = (D); 반면 (NUM * 2 <= P - 없음 + 1 ) { C - ++ = V [q.top ()]; () q.pop; NUM ++ ; } 동안 (! q.empty ()) { V [q.top ()] = 0; () q.pop; } V [NO] = C;하지 위한 ( INT 난 더 = 없음 -; I <= P; I ++ ) { q.push (I); } } 의 printf ( " %의 D ' , V [ 1 ]); }