Problem


Key Idea

큰 값을 a, μž‘μ€ 값을 b라고 ν•˜μž.
\(dif := a - b\) 에 μ΄ˆμ μ„ λ§žμΆ˜λ‹€.
\(3 : 1\)의 λΉ„μœ¨λ‘œ νŒ€μ„ κ΅¬μ„±ν•˜λŠ” 경우, 이 \(dif\) κ°’μ—μ„œ 2μ”© μ°¨κ°ν•˜λŠ” 것과 κ°™λ‹€.

λ”°λΌμ„œ, \(3 : 1\)의 λΉ„μœ¨λ‘œ ꡬ성 κ°€λŠ₯ν•œ μ΅œλŒ€ νŒ€ 수 \(teams = \min( \lfloor {dif \over 2} \rfloor, b )\)
이 \(teams\) 값을 \(b\)μ—μ„œ λΉΌμ£Όκ³ , 남은 인원(\(b\))은 \(2 : 2\)의 λΉ„μœ¨λ‘œ νŒ€μ„ ꡬ성해주면 λœλ‹€.

\(ans = \min( \lfloor {dif \over 2} \rfloor, b ) + \lfloor {b - \min( \lfloor {dif \over 2} \rfloor, b ) \over 2} \rfloor\)



  • Time: \(O(1)\)

Implementation

/**
 * written: 2021. 11. 30. Tue. 15:33:05 [UTC+9]
 * jooncco의 macμ—μ„œ.
 **/

#include <bits/stdc++.h>
using namespace std;

#define FAST_IO ios_base::sync_with_stdio(0),cin.tie(0)

int a,b;

void solve() {
    cin >> a >> b;
    if (a < b) swap(a,b);
    int dif= abs(a-b);
    int threeAndOne= dif/2;
    int ans= min(threeAndOne,b) + (b-min(threeAndOne,b))/2;
    cout << ans << "\n";
}

int main() {
    FAST_IO;
    int t; cin >> t;
    while (t--) solve();
}


Tags:

Updated:

Leave a comment