4 min read

2022 SKKU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ in ์†Œํ”„ํŠธ์˜ ๋ฐค

Table of Contents

2022 SKKU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ in ์†Œํ”„ํŠธ์˜ ๋ฐค-1673535718388.jpeg

2022 SKKU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ in ์†Œํ”„ํŠธ์˜ ๋ฐค-1673535724808.jpeg

2022๋…„ 10์›” 27์ผ์— ์ง„ํ–‰ํ•œ SKKU ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ. ํ•˜๋‚˜์ •๋„๋Š” ๋” ํ’€์–ด๋ณผ๋งŒ ํ–ˆ๋Š”๋ฐ ๋ง‰ํŒ์— ์ง‘์ค‘๋ ฅ์„ ์žƒ๊ณ  4์†”.. (์ด๋ก ์ƒ ์ž…์„ ) ๊ทธ๋ž˜๋„ ์˜ฌํ•ด ์ดˆ์— ์ฐธ๊ฐ€ํ–ˆ๋˜ ๋Œ€ํšŒ๋ณด๋‹ค๋Š” ํ•œ ๋ฌธ์ œ ๋” ํ’€์—ˆ๋‹ค. ๋‚ด๋…„์—๋Š” 5์†” ์ด์ƒ ํ•˜๊ณ  10๋“ฑ ์•ˆ์— ๋“ค ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

A ์•ˆ๋…• ํด๋ ˆ์˜คํŒŒํŠธ๋ผ ์„ธ์ƒ์—์„œ ์ œ์ผ๊ฐ€๋Š” ํฌํ…Œ์ดํ† ์นฉ

๋ฌธ์ œ ๋งํฌ

๋‚ด์•ผ ํ•˜๋Š” ๋ชฉ์†Œ๋ฆฌ XX๋ฅผ 1์”ฉ ๋Š˜๋ฆฌ๋ฉด์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค. NN๋ฒˆ ์‚ฌ๋žŒ๊นŒ์ง€ ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ 1๋ฒˆ ์‚ฌ๋žŒ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, x;
    cin >> n >> x;
    vector<int> v(n);
    for (auto& num : v) {
        cin >> num;
    }

    int cur = 0;
    while (1) {
        if (v[cur] < x) {
            cout << cur+1 << '\n';
            break;
        }
        cur++;
        x++;
        if (cur == n) cur = 0;
    }

    return 0;
}

B ์žฅ์ธ์€ ๋„๊ตฌ๋ฅผ ํƒ“ํ•˜์ง€ ์•Š๋Š”๋‹ค

๋ฌธ์ œ ๋งํฌ

๋ง์น˜ 9๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ณ , ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ๊ฐ•ํ™” ํ™•๋ฅ ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๋ง์น˜๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ง์น˜ 9๊ฐœ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout << fixed << setprecision(7);

    vector<ld> v(10);
    for (auto& x : v) {
        cin >> x;
    }
    sort(v.begin(), v.end());

    ld ans = 1e9;
    for (int i = 1; i < 10; i++) {
        ans = ans * v[i] / i;
    }

    cout << ans << '\n';

    return 0;
}

C ์ˆ˜๋ ต์˜ ์‹œ๊ฐ„์ด๋‹ค!

๋ฌธ์ œ ๋งํฌ

ํ˜„์žฌ ๊ฐ€์ง„ ๋ˆ์œผ๋กœ ์ฐฉ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ์–ด๊ตฌ์˜ ์กฐํ•ฉ์„ ์‹œ๋„ํ•œ๋‹ค. ์ด ๋•Œ ๋ฐฉ์–ด๊ตฌ๋ฅผ ์ฐฉ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ์ž…๋ ฅ๋ฐ›์€ ๋ฐฉ์–ด๊ตฌ์— ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๋„ ์—†๊ณ  ๊ฐ€๊ฒฉ๋„ 0์ธ ๋”๋ฏธ ๋ฐฉ์–ด๊ตฌ ํ•œ๊ฐœ์”ฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ•ํ™”๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ํ˜„์žฌ ์ฐฉ์šฉํ•œ ๋ฐฉ์–ด๊ตฌ์— ๋Œ€ํ•ด ์ „๋ถ€ ์‹œ๋„ํ•ด๋ณธ๋‹ค. ์Šคํ‚ฌ ๋ ˆ๋ฒจ ์ฆ๊ฐ€๋Ÿ‰์„ ์˜ฌ๋ฆด ์Šคํ‚ฌ๊ณผ ๋‚ด๋ฆด ์Šคํ‚ฌ๋„ ์ „๋ถ€ ์‹œ๋„ํ•ด๋ณธ๋‹ค. ์‹ค์ˆ˜ํ•  ์—ฌ์ง€๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์€ ๋ฌธ์ œ๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int t, k;
vector<vector<int>> skills(5);
vector<vector<pair<int, vector<int>>>> items(3);

int calculate(int money, pair<int, vector<int>> &item1, pair<int, vector<int>> &item2, pair<int, vector<int>> &item3) {
    int tc = item1.first + item2.first + item3.first;
    if (tc > money) return -1;

    int ret = 0;
    vector<int>lv(5);
    for (int i = 0; i < 5; i++) {
        lv[i] = item1.second[i] + item2.second[i] + item3.second[i];
        ret += skills[i][min((int)skills[i].size()-1, lv[i])];
    }

    if (money - k >= tc) {
        for (int i = 0; i < 5; i++) { // down
            if (!lv[i]) continue;
            lv[i]--;
            for (int j = 0; j < 5; j++) { // up
                if (i == j) continue;
                lv[j]++;
                int tmp = 0;
                for (int k = 0; k < 5; k++) {
                    tmp += skills[k][min((int)skills[k].size()-1, lv[k])];
                }
                ret = max(ret, tmp);
                lv[j]--;
            }
            lv[i]++;
        }
    }

    return ret;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> t >> k;

    for (auto& v : skills) {
        int sz;
        cin >> sz;
        v.push_back(0);
        for (int i = 0; i < sz; i++) {
            int x;
            cin >> x;
            v.push_back(x);
        }
    }
    
    for (auto& v : items) {
        int sz;
        cin >> sz;
        v.resize(sz+1);

        v[0].first = 0;
        for (int i = 0; i < 5; i++) {
            v[0].second.push_back(0);
        }

        for (int i = 1; i <= sz; i++) {
            cin >> v[i].first;
        }

        for (int i = 1; i <= sz; i++) {
            for (int j = 0; j < 5; j++) {
                int x;
                cin >> x;
                v[i].second.push_back(x);
            }
        }
    }

    int ans = 0;

    for (int i = 0; i < items[0].size(); i++) {
        for (int j = 0; j < items[1].size(); j++) {
            for (int k = 0; k < items[2].size(); k++) {
                ans = max(ans, calculate(t, items[0][i], items[1][j], items[2][k]));
            }
        }
    }

    cout << ans << '\n';

    return 0;
}

D ์–‘๊ณผ ๋Š‘๋Œ€

๋ฌธ์ œ ๋งํฌ

์ฒซ ๋ฒˆ์งธ ๋‚ ์—๋Š” ํ•ญ์ƒ ์–‘์ด ๋„์ฐฉํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ๋‚ ์—๋Š” ํ•ญ์ƒ ๋Š‘๋Œ€์˜ ์ˆ˜๊ฐ€ ์–‘์˜ ์ˆ˜๋ณด๋‹ค ๋งŽ๊ณ , ํ•˜๋ฃจ์— ๋Š‘๋Œ€ ํ˜น์€ ์–‘์ด ํ•œ ๋งˆ๋ฆฌ์”ฉ ๋„์ฐฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ์งธ ๋‚ ๋ถ€ํ„ฐ NN๋ฒˆ์งธ ๋‚ ์ค‘ ์ ์–ด๋„ ํ•˜๋ฃจ ์ด์ƒ ๋Š‘๋Œ€์™€ ์–‘์˜ ์ˆ˜๊ฐ€ ๊ฐ™์•„์ง„๋‹ค.

  • lo<=hilo <= hi์ด๊ณ , mid=(lo+hi)/2mid = (lo+hi)/2๋ผ ํ•˜์ž.
  • midmid๋ฒˆ์งธ ๋‚ ์— ์–‘๊ณผ ๋Š‘๋Œ€์˜ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด midmid๋ฒˆ์งธ ๋‚ ์ด ์ •๋‹ต์ด๋‹ค.
  • midmid๋ฒˆ์จฐ ๋‚ ์— ์–‘์ด ๋” ๋งŽ๋‹ค๋ฉด, mid+1mid+1๋ฒˆ์งธ ๋‚ ๊ณผ hihi๋ฒˆ์งธ ๋‚  ์‚ฌ์ด์— ์ •๋‹ต์ด ์กด์žฌํ•œ๋‹ค.
  • midmid๋ฒˆ์งธ ๋‚ ์— ๋Š‘๋Œ€๊ฐ€ ๋” ๋งŽ๋‹ค๋ฉด lolo๋ฒˆ์งธ ๋‚ ๊ณผ midโˆ’1mid-1๋ฒˆ์งธ ๋‚  ์‚ฌ์ด์— ์ •๋‹ต์ด ์กด์žฌํ•œ๋‹ค. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฌธ์ œ๋ผ ์ถœ๋ ฅ ์ดํ›„ ๋ฒ„ํผ๋ฅผ flush ํ•ด์•ผ ํ•œ๋‹ค.
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n;
    cin >> n;

    int lo = 1, hi = n, cnt;
    while (lo <= hi) {
        int mid = (lo + hi) / 2;
        cout << "? " << mid << endl;
        cin >> cnt;

        if (cnt*2 > mid) lo = mid + 1;
        else if (cnt*2 < mid) hi = mid - 1;
        else {
            cout << "! " << mid << endl;
            break;
        }
    }
    
    return 0;
}

E ์ˆ˜์—ด์˜ ํ•ฉ

๋ฌธ์ œ ๋งํฌ

ย โˆ‘i=STai\sum_{i=S}^{T}{a_i}๋Š” โˆ‘i=1Tai\sum_{i=1}^{T}{a_i} - โˆ‘i=1Sโˆ’1ai\sum_{i=1}^{S-1}{a_i} ์ด๋ฏ€๋กœ โˆ‘i=1Nai\sum_{i=1}^{N}{a_i} ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. ย ์–ด๋–ค ์–‘์˜ ์ •์ˆ˜ dd๋Š” โˆ‘i=1Nai\sum_{i=1}^{N}{a_i}์— 11๊ณผ NN ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” dd์˜ ๋ฐฐ์ˆ˜์˜ ๊ฐœ์ˆ˜๋งŒํผ ๊ธฐ์—ฌํ•œ๋‹ค. ํ™€์ˆ˜์ด๋ฉด (โˆ’1)ร—โŒŠNdโŒ‹(-1) \times \lfloor \frac{N}{d} \rfloor ๋งŒํผ, ์ง์ˆ˜์ด๋ฉด (1)ร—โŒŠNdโŒ‹(1) \times \lfloor \frac{N}{d} \rfloor ๋งŒํผ ๊ธฐ์—ฌํ•œ๋‹ค. ๋ฐฐ์ˆ˜๋ฅผ ์ผ์ผํžˆ ๊ตฌํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int solve(int n) {
    int ret = 0;
    for (int i = 1; i <= n; i++) {
        int x = (i%2) ? -1 : 1;
        ret += (n/i)*x;
    }
    return ret;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int s, t;
    cin >> s >> t;
    cout << solve(t) - solve(s-1) << '\n';

    return 0;
}

F ์ˆ˜ํ™•์˜ ๊ณ„์ ˆ์ด๋‹ค!

๋ฌธ์ œ ๋งํฌ

xx๋ฅผ ๊ณ ์ •์‹œ์ผœ ๋†“๊ณ , ์ฃผ์–ด์ง„ ์ž…๋ ฅ์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ์ด ๋ช‡ ๊ฐœ์˜ ์ž‘๋ฌผ์„ ์ˆ˜ํ™•ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋‚˜์˜จ๋‹ค. Parametric Search ๊ฐ€๋Šฅ. ์„ธํŠธ ์ˆ˜ ร—\times ์ง„ํ–‰ ํšŸ์ˆ˜ =M= M์ด ์ตœ๋Œ€ 1,000,0001,000,000์ด๋ฏ€๋กœ ๋งค๋ฒˆ ๊ธธ์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ ๋˜๊ณ , ๋ฏธ๋ฆฌ ์ขŒํ‘œ๋งˆ๋‹ค ์–ธ์ œ ๋„์ฐฉํ•˜๋Š”์ง€ ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. โˆ’1,000,000โ‰คxโ‰ค1,000,000-1,000,000 \le x \le 1,000,000์ด๊ณ , โˆ’1,000,000โ‰คyโ‰ค1,000,000-1,000,000 \le y \le 1,000,000๋ผ์„œ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค. map์— ์ขŒํ‘œ์™€ ๋ฐฉ๋ฌธ ์‹œ์ ์„ ๊ธฐ๋กํ•œ๋‹ค. ๋งค๋ฒˆ 2์ฐจ์› ๋ฐฐ์—ด์— ๊ธฐ๋กํ–ˆ๋Š”๋ฐ map์„ ์“ฐ๋Š” ๋ฐฉ์‹๋„ ์•Œ์•„๋‘ฌ์•ผ๊ฒ ๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, k;
    cin >> n >> k;
    vector<pair<char, int>> v(n);

    for (auto& [a, b] : v) {
        cin >> a >> b;
    }

    map<pair<int, int>, vector<int>> m;
    map<char, pair<int, int>> mm;
    mm['N'] = {1, 0};
    mm['S'] = {-1, 0};
    mm['E'] = {0, 1};
    mm['W'] = {0, -1};

    int y = 0, x = 0, t = 0;
    for (auto& [a, b] : v) {
        auto& [dy, dx] = mm[a];
        for (int i = 0; i < b; i++) {
            y += dy;
            x += dx;
            m[{y, x}].emplace_back(++t);
        }
    }

    int lo = 0, hi = 1000000;
    while (lo <= hi) {
        int cnt = 0;
        int mid = (lo + hi) / 2;
        for (auto& [p, v] : m) {
            for (int i = 0; i < v.size()-1; i++) {
                for (int j = i+1; j < v.size(); j++) {
                    if (v[j] - v[i] < mid) continue;
                    else {
                        cnt++;
                        i = j-1;
                        break;
                    }
                }
            }
        }
        if (cnt < k) hi = mid - 1;
        else lo = mid + 1;
    }

    cout << hi << '\n';

    return 0;
}