結果
| 問題 |
No.2882 Comeback
|
| コンテスト | |
| ユーザー |
shobonvip
|
| 提出日時 | 2024-09-20 01:46:31 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 48 ms / 2,000 ms |
| コード長 | 1,526 bytes |
| コンパイル時間 | 1,797 ms |
| コンパイル使用メモリ | 193,240 KB |
| 最終ジャッジ日時 | 2025-02-24 09:40:57 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 30 |
コンパイルメッセージ
main.cpp:6:12: warning: use of ‘auto’ in parameter declaration only available with ‘-std=c++20’ or ‘-fconcepts’
6 | bool chmin(auto &a, auto b){ return a > b ? a = b, 1 : 0; }
| ^~~~
main.cpp:6:21: warning: use of ‘auto’ in parameter declaration only available with ‘-std=c++20’ or ‘-fconcepts’
6 | bool chmin(auto &a, auto b){ return a > b ? a = b, 1 : 0; }
| ^~~~
main.cpp:7:12: warning: use of ‘auto’ in parameter declaration only available with ‘-std=c++20’ or ‘-fconcepts’
7 | bool chmax(auto &a, auto b){ return a < b ? a = b, 1 : 0; }
| ^~~~
main.cpp:7:21: warning: use of ‘auto’ in parameter declaration only available with ‘-std=c++20’ or ‘-fconcepts’
7 | bool chmax(auto &a, auto b){ return a < b ? a = b, 1 : 0; }
| ^~~~
ソースコード
#include<bits/stdc++.h>
#define rep(i,s,n) for (int i = (int)(s); i < (int)(n); i++)
#define all(v) begin(v),end(v)
using namespace std;
using ll = long long;
bool chmin(auto &a, auto b){ return a > b ? a = b, 1 : 0; }
bool chmax(auto &a, auto b){ return a < b ? a = b, 1 : 0; }
void solve(){
ll a, b; cin >> a >> b;
ll i = max(a, b);
ll ans = 0;
while (i > 0) {
ll va = a / i;
ll vb = b / i;
ll ja = a / (va + 1);
ll jb = b / (vb + 1);
ll nxt = max(ja, jb);
ll l = nxt+1;
ll r = i+1;
if (l + 1 == r) {
ans += (a % l >= b % l);
}else {
assert (l + 2 <= r);
ll base_a = a % l;
ll base_b = b % l;
ll sabun_a = a % (l+1) - a % l;
ll sabun_b = b % (l+1) - b % l;
ll last_a = a % (r-1);
ll last_b = b % (r-1);
if (base_a >= base_b && last_a >= last_b) {
ans += r - l;
}else if(base_a < base_b && last_a < last_b) {
ans += 0;
}else if(base_a < base_b && last_a >= last_b) {
assert(sabun_a > sabun_b);
ll p = (base_b - base_a + l * sabun_a - l * sabun_b + sabun_a - sabun_b - 1) / (sabun_a - sabun_b);
assert(l < p && p < r);
ans += r - p;
}else{
assert(base_a >= base_b && last_a < last_b);
assert(sabun_b > sabun_a);
ll p = (base_a - base_b - l * sabun_a + l * sabun_b + 1 + sabun_b - sabun_a - 1) / (sabun_b - sabun_a);
assert(l < p && p < r);
ans += p - l;
}
}
// [nxt+1, i+1)
i = nxt;
}
cout << ans << '\n';
}
int main(){
cin.tie(0)->sync_with_stdio(0);
ll t;
cin >> t;
while(t--){
solve();
}
}
shobonvip