結果
問題 | No.2177 Recurring ab |
ユーザー | nono00 |
提出日時 | 2023-01-06 22:28:05 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 963 bytes |
コンパイル時間 | 2,038 ms |
コンパイル使用メモリ | 199,812 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-30 18:48:12 |
合計ジャッジ時間 | 2,858 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
#include <bits/stdc++.h> using namespace std; /* * * a, bを全探索 * * a, b : [0, min(p, 10) - 1] * * x > 1 / N * N * x > 1 * * x = (p * a + b) / (p ^ 2 - 1) * * ((p * a + b) * N) / (P ^ 2 - 1) > 1 * * (p * a + b) * N > p ^ 2 - 1 * * 成り立つpを二分探索 * -> [ok, ng) * * (p, a, b) (max(a, b) + 1 <= p <= ok) * * * */ int main() { int n; cin >> n; long long ans = 0; for (int a = 0; a < 10; a++) { for (int b = 0; b < 10; b++) { if (a == b) { continue; } int left = max(a, b) + 1; int ok = left - 1, ng = 1e9 + 1; while (ng - ok > 1) { long long p = (ok + ng) / 2; if ((p * a + b) * n > p * p - 1) { ok = p; } else { ng = p; } } ans += ok - left + 1; } } cout << ans << endl; }