From cac746a69cb3bcc435ee4dce41a2a341d999e2c1 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Sun, 3 May 2026 18:45:47 +0900 Subject: [PATCH] add 2026-kaist-run-spring --- .../contest/cpp/2026-kaist-run-spring-1.cpp | 103 ++++++++++++++++++ .../contest/cpp/2026-kaist-run-spring-2.cpp | 36 ++++++ .../contest/cpp/2026-kaist-run-spring-4.cpp | 80 ++++++++++++++ 3 files changed, 219 insertions(+) create mode 100644 storage/contest/cpp/2026-kaist-run-spring-1.cpp create mode 100644 storage/contest/cpp/2026-kaist-run-spring-2.cpp create mode 100644 storage/contest/cpp/2026-kaist-run-spring-4.cpp diff --git a/storage/contest/cpp/2026-kaist-run-spring-1.cpp b/storage/contest/cpp/2026-kaist-run-spring-1.cpp new file mode 100644 index 0000000..e56bc4f --- /dev/null +++ b/storage/contest/cpp/2026-kaist-run-spring-1.cpp @@ -0,0 +1,103 @@ +#include +#include +#include + +#define let auto +#define fn auto +#define usize size_t +using namespace std; + +#define UD 1'000'000 + +fn fastio() { + ios::sync_with_stdio(false); + cin.tie(nullptr); +} + +fn main() -> int { + fastio(); + usize n, m; + cin >> n >> m; + + let arr = new usize[5 * m]; + + let music = new usize[n]; + let cnts = new usize[n]; + for (usize i = 0; i < n; i++) { + music[i] = UD; + cnts[i] = 0; + } + + for (usize i = 0; i < m; i++) { + for (usize j = 0; j < 4; j++) { + cin >> arr[5 * i + j];// idx + arr[5 * i + j] -= 1; + cnts[arr[5 * i + j]]++; + } + cin >> arr[5 * i + 4]; + } + + let cntv = vector>(); + for (usize i = 0; i < n; i++) { + cntv.push_back(pair(cnts[i], i)); + } + + sort(cntv.begin(), cntv.end()); + reverse(cntv.begin(), cntv.end()); + + usize tot = 0; + usize before = 0; + for (let it = cntv.begin(); it < cntv.end(); it++) { + if (tot > 3 * m) { + music[before] = UD; + break; + } else if (tot == 3 * m) { + break; + } + else { + tot += it->first; + music[it->second] = 0; + before = it->second; + } + } + + for (usize i = 0; i < m; i++) { + let x = arr[5 * i + 0]; + let y = arr[5 * i + 1]; + let z = arr[5 * i + 2]; + let w = arr[5 * i + 3]; + let k = arr[5 * i + 4]; + let mx = music[x]; + let my = music[y]; + let mz = music[z]; + let mw = music[w]; + let key = (mx % 4 + my % 4 + mz % 4 + mw % 4) % 4; + if ((mx + my + mz + mw) / UD == 1) { + if (mx == UD) { + music[x] = (k + 4 - key) % 4; + } else if (my == UD) { + music[y] = (k + 4 - key) % 4; + } else if (mz == UD) { + music[z] = (k + 4 - key) % 4; + } else { + music[w] = (k + 4 - key) % 4; + } + } + } + + for (usize i = 0; i < n; i++) { + if (music[i] == UD) { + music[i] = 0; + } + } + + for (usize i = 0; i < n; i++) { + cout << music[i] << " "; + } + + delete[] arr; + delete[] music; + delete[] cnts; + + return 0; +} \ No newline at end of file diff --git a/storage/contest/cpp/2026-kaist-run-spring-2.cpp b/storage/contest/cpp/2026-kaist-run-spring-2.cpp new file mode 100644 index 0000000..50a347c --- /dev/null +++ b/storage/contest/cpp/2026-kaist-run-spring-2.cpp @@ -0,0 +1,36 @@ +#include +#include +#include + +#define let auto +#define fn auto +#define usize size_t +using namespace std; + +fn fastio() { + ios::sync_with_stdio(false); + cin.tie(nullptr); +} + +fn main() -> int { + fastio(); + usize r, u, n; + cin >> r >> u >> n; + + usize cnt = r * u; + if (n <= 10) { + usize fibn = 2; + usize fibns1 = 1; + usize fibns2 = 1; + + for (usize i = 3; i < n; i++) { + fibns2 = fibns1; + fibns1 = fibn; + fibn = fibns2 + fibns1; + } + usize delta = ((u - 1) * fibns1 + (r - 1) * fibns2); + cout << delta / fibns1 + delta / fibns2 - (delta / (fibns1 * fibns2)) + 1 << endl; + } else { + cout << cnt << endl; + } +} \ No newline at end of file diff --git a/storage/contest/cpp/2026-kaist-run-spring-4.cpp b/storage/contest/cpp/2026-kaist-run-spring-4.cpp new file mode 100644 index 0000000..2050001 --- /dev/null +++ b/storage/contest/cpp/2026-kaist-run-spring-4.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include + +#define let auto +#define fn auto +#define usize size_t + +#define UMAX 0xfffffff + +using namespace std; + +fn fastio() { + ios::sync_with_stdio(false); + cin.tie(nullptr); +} + +struct Fire { + usize f; + usize v; +}; + +fn main() -> int { + fastio(); + let _comp = [](Fire &a, const Fire &b) { return a.f < b.f; }; + usize n, m; + cin >> n >> m; + + let fs = vector(n); + let bs = vector(m); + + for (usize i = 0; i < n; i++) { + cin >> fs[i].f; + cin >> fs[i].v; + } + + sort(fs.begin(), fs.end(), _comp); + + for (usize i = 0; i < m; i++) { + cin >> bs[i]; + } + + // 1pass + usize last = UMAX; + let vfx = vector(); + for (usize i = 0; i < m; i++) { + let t = bs[i]; + + Fire tf = { + .f = t, + .v = 0, + }; + + + + } + + if (last == UMAX) { + last = m; + } + + // 2pass + sort(vfx.begin(), vfx.end()); + let heap = priority_queue(); + usize total_v = 0; + while (vfx.size() > 0) { + let key = *(vfx.end() - 1); + vfx.pop_back(); + while (fs.size() > 0 && (fs.end() - 1)->f >= key) { + heap.push((fs.end() - 1)->v); + fs.pop_back(); + } + + total_v += heap.top(); + heap.pop(); + } + + cout << last << " " << total_v << endl; +} \ No newline at end of file