結果
| 問題 |
No.2929 Miracle Branch
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2024-10-15 01:25:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,857 bytes |
| コンパイル時間 | 3,721 ms |
| コンパイル使用メモリ | 207,720 KB |
| 最終ジャッジ日時 | 2025-02-24 19:41:25 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 9 WA * 34 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<bool> prime;
void erat(ll N){
prime.resize(N+1, 1);
prime[0] = 0;
prime[1] = 0;
for (ll i=2; i*i<=N; i++){
if (prime[i]){
for (ll j=i*2; j <= N; j+=i){
prime[j] = 0;
}
}
}
}
int main(){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
/*
4は2*2に分解しない方がいい
6以上は分解した方がいい。
*/
ll X, N=2e5, ng=0, nb=0, x, y;
cin >> X;
if (X == 1){
cout << 2 << endl;
cout << 1 << " " << 2 << endl;
cout << 'b' << " " << 'g' << endl;
return 0;
}
vector<ll> v; //茶色の頂点の番号
map<ll, ll> mp;
erat(N);
for (int i=2; i<=N; i++){
if (!prime[i]) continue;
while(X % i == 0){
X /= i;
mp[i]++;
}
}
if (X > N){
cout << -1 << endl;
return 0;
}
x = mp[2];
y = x/2;
//4がy個
for (int i=0; i<y; i++){
nb++;
v.push_back(ng+nb);
ng += 4;
}
if (x % 2 == 1){
nb++;
v.push_back(ng+nb);
ng += 2;
}
for (auto [x, y] : mp){
if (x == 2) continue;
for (int i=0; i<y; i++){
nb++;
v.push_back(ng+nb);
ng += x;
}
}
v.push_back(nb+ng+1);
if (nb+ng > N){
cout << -1 << endl;
return 0;
}
cout << nb+ng << endl;
for (int i=0; i<v.size()-1; i++){
for (int j=v[i]+1; j<=v[i+1]-1; j++){
cout << v[i] << " " << j << endl;
}
}
for (int i=0; i<v.size()-1; i++){
cout << "b ";
for (int j=v[i]+1; j<=v[i+1]-1; j++){
cout << "g ";
}
}
cout << endl;
return 0;
}
srjywrdnprkt