結果
| 問題 |
No.3162 Five Two Three
|
| コンテスト | |
| ユーザー |
Nachia
|
| 提出日時 | 2025-05-23 20:24:57 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,743 bytes |
| コンパイル時間 | 1,059 ms |
| コンパイル使用メモリ | 85,424 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-05-23 20:25:45 |
| 合計ジャッジ時間 | 14,596 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 184 WA * 3 |
ソースコード
#ifdef NACHIA
#define _GLIBCXX_DEBUG
#else
#define NDEBUG
#endif
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using i64 = long long;
using u64 = unsigned long long;
#define rep(i,n) for(i64 i=0; i<i64(n); i++)
const i64 INF = 1001001001001001001;
template<typename A> void chmin(A& l, const A& r){ if(r < l) l = r; }
template<typename A> void chmax(A& l, const A& r){ if(l < r) l = r; }
using namespace std;
using i128 = __int128_t;
vector<i128> A1, B1, A2;
void changeAns(vector<i64>& l, vector<i64> r){
if(l.size() == 0) swap(l, r);
if(r.size() == 0) return;
if(l.size() > r.size()) swap(l, r);
}
void testcase(){
i64 X, Y, Z; cin >> X >> Z >> Y;
if(X == 0 && Y == 0 && Z == 0){
cout << "3\n0 0 0\n";
return;
}
if(X == Y && Y == Z){
cout << "4\n" << X << " 0 " << X << " " << X << "\n";
return;
}
A1 = {1,0};
B1 = {0,1};
rep(f,2){
while(max(A1.back(), B1.back()) < INF){
A1.push_back(A1[A1.size() - 1] + A1[A1.size() - 2]);
B1.push_back(B1[B1.size() - 1] + B1[B1.size() - 2]);
}
reverse(A1.begin(), A1.end());
reverse(B1.begin(), B1.end());
}
A2 = {1,0,1,1,0,1};
rep(f,2){
while(A2.back() < INF){
A2.push_back(A2[A2.size() - 1] + A2[A2.size() - 2]);
}
reverse(A2.begin(), A2.end());
}
bool sw = false;
if(X == Y){ sw = true; swap(X, Z); }
vector<i64> ans;
rep(c,A2.size()) rep(b,c) rep(a,b){
if(A2[a] * Y != A2[b] * X) continue;
if(A2[a] == 0 && A2[b] == 0) continue;
i64 q = (A2[a] == 0) ? Y / A2[b] : X / A2[a];
if(A2[c] * q != Z) continue;
vector<i64> f;
for(i64 i=a; i<=c; i++) f.push_back(A2[i] * q);
changeAns(ans, move(f));
}
rep(c,A1.size()) rep(b,c) rep(a,b){
i128 x = X * B1[b] - Y * B1[a];
i128 y = A1[a] * Y - A1[b] * X;
i128 d = A1[a] * B1[b] - A1[b] * B1[a];
if(d == 0) continue;
if(x % d != 0) continue;
if(y % d != 0) continue;
x /= d; y /= d;
if(Z != A1[c] * x + B1[c] * y) continue;
vector<i64> f;
for(i64 i=a; i<=c; i++) f.push_back(A1[i] * x + B1[i] * y);
bool ok = true;
for(auto g : f) if(g < 0) ok = false;
if(ok) changeAns(ans, move(f));
}
if(sw) reverse(ans.begin(), ans.end());
if(ans.size() == 0){
cout << "-1\n";
} else {
cout << ans.size() << "\n";
rep(i,ans.size()){
if(i) cout << " ";
cout << ans[i];
} cout << "\n";
}
}
int main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
testcase();
return 0;
}
Nachia