結果
問題 |
No.2929 Miracle Branch
|
ユーザー |
![]() |
提出日時 | 2024-10-12 16:36:03 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,558 bytes |
コンパイル時間 | 854 ms |
コンパイル使用メモリ | 75,692 KB |
最終ジャッジ日時 | 2025-02-24 18:37:54 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | WA * 25 TLE * 1 -- * 17 |
ソースコード
#include<iostream> #include<vector> using namespace std; vector<pair<long long, long long> > prime_factorize(long long N) { vector<pair<long long, long long> > res; for (long long a = 2; a * a <= N; ++a) { if (N % a != 0) continue; long long ex = 0; // 指数 // 割れる限り割り続ける while (N % a == 0) { ++ex; N /= a; } // その結果を push res.push_back({a, ex}); } // 最後に残った数について if (N != 1) res.push_back({N, 1}); return res; } int main() { long long X; cin >> X; if(X==1){ cout << 2 << endl; cout << "1 2" << endl; cout << "b g" << endl; return 0; } vector<pair<long long,long long>>num=prime_factorize(X); int cnt=0; for(int i=0;i<num.size();i++){ cnt+=(num[i].first+1)*num[i].second; if(cnt>2e5)break; } if(cnt>2e5){ cout << -1 << endl; return 0; } cout << cnt << endl; int rotti=cnt; //まず茶をつなぐ cnt=2; for(int i=0;i<num.size();i++)for(int j=0;j<num[i].second;j++){ cout << cnt-1 << " " << cnt << endl; cnt++; } //つぎに緑を付けていく int count=1; for(int i=0;i<num.size();i++){ for(int j=0;j<num[i].second;j++){ for(int k=0;k<num[i].first;k++){ cout << count << " " << cnt << endl; cnt++; } count++; } } //色の配置を出力 cout << "b"; for(int i=1;i<count-1;i++)cout << " " << "b"; for(int i=0;i<rotti-count;i++)cout << " " << "g"; cout << endl; }