結果
問題 | No.1243 約数加算 |
ユーザー | msm1993 |
提出日時 | 2020-10-06 11:50:38 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,677 bytes |
コンパイル時間 | 1,736 ms |
コンパイル使用メモリ | 171,236 KB |
実行使用メモリ | 6,940 KB |
最終ジャッジ日時 | 2024-07-20 00:43:15 |
合計ジャッジ時間 | 2,589 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 2 ms
6,940 KB |
testcase_05 | AC | 4 ms
6,940 KB |
testcase_06 | AC | 4 ms
6,940 KB |
testcase_07 | AC | 3 ms
6,940 KB |
testcase_08 | AC | 3 ms
6,940 KB |
testcase_09 | AC | 2 ms
6,940 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll A, B; vector<ll> v; ll my_pow(ll x, ll n) { if (n == 0) return 1; if (n % 2 == 0) return my_pow(x * x, n / 2); return x * my_pow(x, n - 1); } ll a; int t; void add(int n) { t = -1; for (int i = 1; i <= n; i++) { if (B - a - A * my_pow(2, i) >= 0) { t = i; } } if (t != -1) { v.push_back(A * my_pow(2, t)); a += v.back(); } } void add2() { ll k = a; int g = 0; while (k % 2 == 0 && B - a - my_pow(2, g) >= 0) { k /= 2; g++; } if (g == 0) return; if (B - a - my_pow(2, g) < 0) g--; v.push_back(my_pow(2, g)); a += my_pow(2, g); } void solve() { v.clear(); a = A; for (int i = 0; i < 120; i++) { if (B >= 2 * a) { v.push_back(a); a *= 2; } } a = A; for (ll i : v) { a += i; } t = v.size(); for (int i = 0; i < 70; i++) { if (t == -1) break; add(t); } if (B - a - A >= 0) { v.push_back(A); a += A; } if (a % 2 == 1 && B - a != 0) { a++; v.push_back(1); } for (int i = 0; i < 70; i++) { add2(); } ll n = A; cout << v.size() << "\n"; for (int i = 0; i < v.size(); i++) { if (i == v.size() - 1) { cout << v.back() << "\n"; } else { cout << v[i] << " "; } n += v[i]; } //cout << B << " " << n << "\n"; } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { cin >> A >> B; solve(); } return 0; }