루오 구 P1080 킹스 게임 (정밀 + 욕심)

제목 설명

과 일치  H H 건국 기념일, 왕이 초대 N 경품 게임을 장관 n 비트의. 첫째, 그는 각각의 상단에 왼쪽과 오른쪽에 각각 장관은 자신이 각은 오른쪽에 정수를 쓰기 왼쪽 된 정수 왕을 작성 할 수 있습니다. 그런 다음,하자  N- 형 연속으로 N-장관, 왕이 전면 대열에 서 있습니다. 줄 지어 후, 모든 장관들이 금화 왕 보상의 번호를 받게됩니다, 각 장관에 대한 동전의 수를 얻었다 : 오른손의 숫자로 나눈 수의 모든 장관의 앞 왼쪽에있는 행의 제품, 결과는 정수를 수득 내림된다.

왕이 장관은 특히 큰 상을받을 싶지 않기 때문에 그가 그렇게 가장 보상 장관을 얻기 위해, 그 팀의 순서를 재 배열 도움을 부탁드립니다, 가능한 한 적게 보상을 받았다. 왕의 위치가 항상 앞 순위에있다합니다.

입력 형식

첫 번째 라인은 정수를 포함 N- 형 , N- 형을 장관의 수를 나타낸다.

두 번째 행은 두 정수 포함  A와  B 사이의 공간에 의해 분리 B를 각각 오른쪽과 왼쪽 왕의 정수를 나타낸다.

이어서,  N- N-행은 두 정수있어서 각 행 A와  B 는 각각 좌측 및 우측 사이의 공간에 의해 분리 된 B는 각각 정수 장관을 나타낸다.

출력 형식

금화 장관의 가장 번호를 재 배열 투어 우승 후 팀을 나타내는 정수를 얻을.

샘플 입출력

기입
(3) 
1 
2 3 
7 4 
4 6
수출 


욕심 증거 : 왕이 왕이하자 장관 (P1)에, P2.
왕의 왕 L0 L0 R0의 가산 R0

   P1 P2 L1 L2 R1 R2
   P2 L1 L2 R1 R2 P1은

K1 = L0 / R1, K2 = 인 L0 * L1 / R2, K3 = L0 / R2, K4 = L0 * L2 / R1.
ans1 = 최대 (K1, K2) , ans2 = 최대 (K3은, K4)을,
외관상 K2> K3, K4> K1이므로 ans1> ans2 상기 K2> K4, 즉 L1 * R1> I2의 *의 R2의 경우,
따라서 정렬 A * B를을 누르하면 우선 순위가 될 수있다.

(정밀 연산 보드로서, 더 이상 설명)
사용법 #include <iostream> 
#INCLUDE <CString을> 
#INCLUDE < 문자열 > 
#INCLUDE <알고리즘> 
#INCLUDE <큐> 
#INCLUDE <적층> 
#INCLUDE <STDIO.H> 
#INCLUDE <cmath> 
#INCLUDE < 문자열 .H> 
# 포함 <벡터> #DEFINE는 오래 오래 것이다
 사용하는 네임 스페이스 표준을; INT의 N, 렌즈 = 1 , = lenm는 1 레나 = 1 ;
INT의 합 [ 10010 ] = { 0 , 1

 

} MAXN는 [ 10010 ] = { 0 , 1이다.이 } ANS는 [ 10010 ] 

구조체 {중 
    , LL의 L, R & LT 
    부울  연산자 <( CONST X의) CONST 
    { 
        복귀 L의 *의 R & LT <XL * XR은;      // 프레스 동전 좌우 우선 순위 제조 
    } 
} COIN [ 1,001 ] 

무효 시간 (X LL)     // 정밀 승산 
{
     INT T = 0 ]
      ( INT I = . 1 , I는 = 렌즈 <; I ++는 ) 
        SUM [I] * =엑스;
    위한 ( int로 I = 1 ; i가 렌즈 = <; 내가 ++ ) 
    { 
        t + = 합 [I]; 
        합 [I] t의 % = 10 ; 
        t / = 10 ; 
    } 
    동안 (t! = 0 ) 
    { 
        렌즈 ++ ; 
        합 [렌즈] t의 % = 10 ; 
        t / = 10 ; 
    } 
} 

무효 사업부 (LL X)          // 高精度除法
{ 
    memset 함수 (ANS, 0, 는 sizeof (ANS)); 
    레나 = 렌즈;
    INT의 t = 0 ;
    위한 ( int로 = 렌즈를 I, I> = 1 , 난 - ) 
    { 
        t * = 10 ; 
        t + = 합 [I];
        만약 (t> = X) 
        { 
            ANS [I] = t / (X); 
            t의 % = X; 
        } 
    } 
    동안 (ANS [레나] == 0 ) 
    { 
        경우 (레나 == 1)
             휴식 ; 
        레나 - ; 
    } 
} 

공극 맥스 ()         // 高精度比较
{
     경우 (레나> lenm는) 
    { 
        위해 ( int로 I = 1 ; I <= 레나; 내가 ++ ) 
            maxn [I] = 된 ANS [I]; 
        lenm는 = 레나; 
    } 
    다른  경우 (레나 == lenm는) 
    { 
         ( INT I = 레나; I> = 1 , 난 - )
             경우 (maxn [I] <ANS [I]) 
            { 
                 ( INT의 J = 1 ; J <= 레나, J ++ ) 
                    maxn [J] = 된 ANS [J] 
                lenm는 = 레나;
                휴식 ; 
            } 
    } 
} 

INT 주 () 
{ 
    IOS :: sync_with_stdio ( 거짓 ); 
    CIN >> N; 
    CIN >> 코인 [ 0 ] 펜닐 >> 코인 [ 0 ] .R;
    위한 ( int로 I = 1 난 = <N; I ++  )
        CIN경화 >> [I] 펜닐 >> 코인 [I] .R; 
    정렬 (코인 + 1 , N + 코인은 + 1 );
    위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) 
    { 
        회 (코인 [I - 1 ] 펜닐); 
        DIV (코인 [I] .R); 
        최대 (); 
    } 
    에 대해 ( int로 I = lenm는, I> = 1 , 난 - ) 
        COUT << maxn [I];
    반환  0 ; 
}

 



추천

출처www.cnblogs.com/zxybdnb/p/11443962.html