結果
問題 | No.3048 Swing |
ユーザー |
![]() |
提出日時 | 2025-03-07 22:15:43 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,327 bytes |
コンパイル時間 | 6,467 ms |
コンパイル使用メモリ | 335,352 KB |
実行使用メモリ | 7,324 KB |
最終ジャッジ日時 | 2025-03-14 17:02:09 |
合計ジャッジ時間 | 7,827 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 58 WA * 1 |
ソースコード
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; #pragma GCC target("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define FASTIO cin.tie(0)->sync_with_stdio(0) using ll = __int128; using mint = modint998244353; ll read() { string s; cin >> s; ll ret = 0; ll sgn = (isdigit(s[0]) ? 1 : -1); for(char &c : s) { if(!isdigit(c)) continue; ret = ret * 10 + (c - '0'); } return sgn * ret; } void write(ll x) { if(x == 0) { cout << "0" << endl; return; }else if(x < 0) { cout << "-"; x *= -1; } string ret = ""; while(x > 0) { ret += to_string((int)(x % 10)); x /= 10; } reverse(ret.begin(), ret.end()); cout << ret << endl; } ll solve(ll x, ll n) { if(x == 0) { ll k = (n + 1) / 2; return (n % 2 == 1 ? k : -k); }else if(x < 0) { return -solve(-x, n); }else if(x > n * (n + 1) / 2) { return x - n * (n + 1) / 2; } ll ok = 0, ng = n; while(ok + 1 < ng) { ll k = (ok + ng) / 2; if(x > k * (k + 1) / 2) ok = k; else ng = k; } const ll m = ok; x -= m * (m + 1) / 2; if((n - m) % 2 == 1) { return x - (m + 1) - (n - m - 1) / 2; }else { return x + (n - m) / 2; } } int main() { ll x = read(); ll n = read(); write(solve(x, n)); }