結果
問題 |
No.3054 Modulo Inequalities
|
ユーザー |
|
提出日時 | 2025-02-05 20:36:53 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 501 ms / 2,500 ms |
コード長 | 1,287 bytes |
コンパイル時間 | 12,118 ms |
コンパイル使用メモリ | 353,104 KB |
実行使用メモリ | 48,504 KB |
最終ジャッジ日時 | 2025-02-05 20:38:12 |
合計ジャッジ時間 | 22,261 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
#include <bits/stdc++.h> #include "testlib.h" void solve() { int n = inf.readInt(1, 500000); inf.readEoln(); const int m = 1000010; std::vector<int> cnt(2 * m + 1, 0); for (int i = 0; i < n; i++) { int a = inf.readInt(1, 1000000); inf.readSpace(); int b = inf.readInt(1, 1000000); inf.readEoln(); cnt[a + m]--; cnt[b + m]++; cnt[b - a - 1 + m]--; } std::vector<int> cum(2 * m + 1, 0); for (int i = 1; i <= 2 * m; i++) { cum[i] = cum[i - 1] + cnt[i]; } int min_ = n + 1; int idx = -1; for (int i = 1; i < m; i++) { int ge = 0; for (int t = 0; t * i < m; t++) { int l = t * i; int r = std::min(m, l + i); ge += (cum[r - 1 + m] - cum[l - 1 + m]) * t; } for (int t = 0; t * i > -m; t--) { int r = t * i; int l = std::max(-m + 1, r - i); ge += (cum[r - 1 + m] - cum[l - 1 + m]) * (t - 1); } if (ge < min_) { min_ = ge; idx = i; } } std::cout << idx << std::endl; } int main(int argc, char *argv[]) { std::cin.tie(0)->sync_with_stdio(0); registerValidation(argc, argv); solve(); inf.readEof(); }