結果
問題 | No.1243 約数加算 |
ユーザー |
![]() |
提出日時 | 2020-10-06 11:50:38 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.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 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 9 |
ソースコード
#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;}