From 122a6c824d8108f80a0d15db264ebdc29c64c39c Mon Sep 17 00:00:00 2001 From: oncsr Date: Wed, 29 Oct 2025 22:47:18 +0900 Subject: [PATCH] =?UTF-8?q?[20251029]=20BOJ=20/=20P1=20/=20=EC=89=BD?= =?UTF-8?q?=EA=B2=8C=20=EC=A0=9C=ED=95=9C=EB=90=9C=20=EB=A9=94=EB=AA=A8?= =?UTF-8?q?=EB=A6=AC=20/=20=EA=B6=8C=ED=98=81=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \353\251\224\353\252\250\353\246\254.md" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "khj20006/202510/29 BOJ P1 \354\211\275\352\262\214 \354\240\234\355\225\234\353\220\234 \353\251\224\353\252\250\353\246\254.md" diff --git "a/khj20006/202510/29 BOJ P1 \354\211\275\352\262\214 \354\240\234\355\225\234\353\220\234 \353\251\224\353\252\250\353\246\254.md" "b/khj20006/202510/29 BOJ P1 \354\211\275\352\262\214 \354\240\234\355\225\234\353\220\234 \353\251\224\353\252\250\353\246\254.md" new file mode 100644 index 00000000..e828c8f0 --- /dev/null +++ "b/khj20006/202510/29 BOJ P1 \354\211\275\352\262\214 \354\240\234\355\225\234\353\220\234 \353\251\224\353\252\250\353\246\254.md" @@ -0,0 +1,49 @@ +```cpp +#include +using namespace std; +using ll = long long; + +const ll MOD = 1'000'000'007; +ll N, X, A, B, Q, ans = 0, s[100]{}, e[100]{}; +vector q, p; + +int main() { + cin.tie(0)->sync_with_stdio(0); + + cin >> N >> X >> A >> B >> Q; + q.resize(Q); + p.resize(Q); + iota(p.begin(), p.end(), 0); + for (int& i : q) cin >> i, i++; + fill(e, e + Q, MOD - 1); + sort(q.begin(), q.end()); + + int rem = Q; + while (rem) { + vector ms; + for (int i = 0; i < Q; i++) if (s[i] < e[i]) ms.push_back((s[i] + e[i] + 1) >> 1); + sort(ms.begin(), ms.end()); + ms.erase(unique(ms.begin(), ms.end()), ms.end()); + vector cnt(ms.size()); + + int pos = 0; + for (ll x = X, j = 0; j < N - 1; j++) { + int d = upper_bound(ms.begin(), ms.end(), x) - ms.begin(); + if (d != ms.size()) cnt[d]++; + x = (x * A + B) % MOD; + } + for (int i = 1; i < ms.size(); i++) cnt[i] += cnt[i - 1]; + + for (int i = 0; i < Q; i++) if (s[i] < e[i]) { + int m = (s[i] + e[i] + 1) >> 1; + int idx = lower_bound(ms.begin(), ms.end(), m) - ms.begin(); + if (cnt[idx] < q[i]) s[i] = m; + else e[i] = m - 1; + if (s[i] >= e[i]) ans += (s[i] + e[i] + 1) >> 1, rem--; + } + } + + cout << ans; + +} +```