結果
| 問題 | No.3416 マッチ棒パズル Extra |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-01-05 14:08:08 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,066 bytes |
| 記録 | |
| コンパイル時間 | 761 ms |
| コンパイル使用メモリ | 103,572 KB |
| 実行使用メモリ | 11,048 KB |
| 最終ジャッジ日時 | 2026-01-05 14:08:18 |
| 合計ジャッジ時間 | 9,660 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 25 |
ソースコード
//たぶん終わらない
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef __int128_t int128;
const ll MOD = 998244353;
/**
* xy <= n (x, y >= 1)
* Stern-Brocot
*/
struct LatticeCounter {
ll N;
int128 count;
void solve_recursive(ll n, ll a, ll b, ll c, ll d, ll x, ll y) {
ll m = a + c, p = b + d;
if (m * (int128)y + (int128)p * x * y > n) return;
if (m * (int128)y + (int128)p * x * y <= n) {
ll x_next = (n - p * (int128)x * y) / (p * y + m);
ll y_next = (n - m * (int128)x * y) / (m * x + p);
count += (int128)x_next * y_next;
solve_recursive(n, a, b, m, p, x, y);
solve_recursive(n, m, p, c, d, x, y);
}
}
ll get_S(ll n) {
if (n <= 0) return 0;
if (n == 1) return 1;
ll k = pow(n, 0.5);
while ((k + 1) * (int128)(k + 1) <= n) k++;
while (k * (int128)k > n) k--;
int128 sum_val = 0;
for (ll l = 1, r; l <= k; l = r + 1) {
r = n / (n / l);
if (r > k) r = k;
sum_val += (int128)(n / l) * (r - l + 1);
}
int128 res = sum_val * 2 - (int128)k * k;
return (ll)(res % MOD);
}
};
ll fast_S(ll n) {
if (n <= 0) return 0;
ll k = sqrtl(n);
while ((k + 1) * (int128)(k + 1) <= n) k++;
while (k * (int128)k > n) k--;
int128 res = 0;
for (ll i = 1; i <= k; ++i) {
res += n / i;
}
res = res * 2 - (int128)k * k;
return (ll)(res % MOD);
}
void solve() {
ll N;
if (!(cin >> N)) return;
ll K = 2 * N + 1;
ll sK = fast_S(K);
ll sK2 = fast_S(K / 2);
ll sK4 = fast_S(K / 4);
ll fK = (sK - 2 * sK2 % MOD + sK4 + 2LL * MOD) % MOD;
ll ans = (fK - (K % MOD) + MOD) % MOD;
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
if (!(cin >> T)) return 0;
while (T--) {
solve();
}
return 0;
}