ABOUT ME

Today
Yesterday
Total
  • [ARC119 A] 119 × 2^23 + 1
    문제 풀이/AtCoder 2023. 1. 30. 13:53

    난이도: 69 // 보정 없이는 -417

     

    태그

    더보기
    • Brute Force (브루트 포스)
    • Mathematics (수학)
    • Arithmetic (사칙연산)

     

    풀이

    1. b의 값으로 가능한 수들은?

    더보기

    b>log2N이라면, 2b>2log2N=N이 됩니다.

    즉, b의 값으로 가능한 경우는 O(logN)가지가 되겠네요.

     

    그러니 가능한 모든 b에 대해 답을 구해봅시다.

     

    2. b가 고정되면, a,c로 써야 하는 값은?

    더보기

    b가 고정이 되면, 자연스럽게 2b 역시 고정이 됩니다.

    그럼 저희는, N=a×2b+c이면서 a+c를 최소화하면 되겠네요.

     

    2b1이므로, a1을 더하면 c2b1만큼 감소합니다.

    그럼 a1을 더했을 때, a+c의 합은 그대로거나 감소하게 됩니다.

     

    이 아이디어를 잘 적용시키면, a를 최대화해야 한다는 결론이 나옵니다.

     

    코드

    더보기

    가능한 모든 b에 대해, 사용할 수 있는 최대의 a를 찾고, 이 때의 c를 찾아주면 됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Main(){
        ll n; cin >> n;
        ll ans = 2e18;
        ll b = 0, x = n; while (x){
            ll b2 = 1LL<<b;
            if (b2 > n){ break; }
            ll a = n/b2, c = n-a*b2;
            ans = min(ans, a+b+c);
            x >>= 1; b += 1;
        }
        cout << ans;
    }
    cs

    '문제 풀이 > AtCoder' 카테고리의 다른 글

    [ABC006 D] トランプ挿入ソート  (0) 2023.01.30
    [ABC213 E] Stronger Takahashi  (0) 2023.01.30
    [ABC038 C] 単調増加  (0) 2023.01.30
    [ABC226 C] Martial artist  (0) 2023.01.30
    [AGC030 A] Poisonous Cookies  (0) 2023.01.30
Designed by Tistory.