結果
| 問題 |
No.2929 Miracle Branch
|
| コンテスト | |
| ユーザー |
rotti_coder
|
| 提出日時 | 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;
}
rotti_coder