結果
| 問題 |
No.3048 Swing
|
| コンテスト | |
| ユーザー |
ripity
|
| 提出日時 | 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));
}
ripity