#include <bits/stdc++.h>
#define MAX_N 50007
using namespace std;
string s[MAX_N][2];
string s1;
void Dziewiec(int N){
int nawias0 = 0, nawias1 = 0;
int nine;
int l = N;
while(l){
nine = l%9;
if(nine){
if(nine > 1){
s[N][0] += to_string(nine) + 'D';
if(nine > 2) s[N][1] += to_string(nine) + "BF";
else s[N][1] += "BFBF";
}else{
if(s[N][0].size()){
s[N][0].pop_back();
nawias0--;
}
s[N][0] += 'D';
s[N][1] += "BF";
}
}
l/=9;
if(l){
s[N][0] += "9[";
s[N][1] += "9[";
nawias0++;
nawias1++;
}
}
for(int i = 0; i < nawias0; i++) s[N][0] += ']';
for(int i = 0; i < nawias1; i++) s[N][1] += ']';
}
void Floor(int N){
s[1][0] = 'D';
s[1][1] = "BF";
s[2][1] = "BFBF";
for(int i = 1; i <= N; i++){
if(s[i][0].empty()) Dziewiec(i);
for(int j = 2; j < 10; j++){
if(s[i][0].size() > 1) s1 = to_string(j) + '[' + s[i][0] + ']';
else s1 = to_string(j) + s[i][0];
if(s[i*j][0].empty() || s[i*j][0].size() > s1.size()) s[i*j][0] = s1;
s1 = to_string(j) + '[' + s[i][1] + ']';
if(s[i*j][1].empty() || s[i*j][1].size() > s1.size()) s[i*j][1] = s1;
}
}
}
void DziewiecPoc(int N){
int nawias = 0;
int nine;
int l = N;
string s2 = "";
while(l){
nine = l%9;
if(nine){
if(nine > 1){
s2 += to_string(nine) + 'F';
}else{
if(s2.size()){
s2.pop_back();
nawias--;
}
s2 += 'F';
}
}
l/=9;
if(l){
s2 += "9[";
nawias++;
}
}
for(int i = 0; i < nawias; i++) s2 += ']';
s1 += s2;
}
void Poczatek(int N){
int nawias = 0;
int l = N;
s1 = "";
for(int i = 9; i >= 2; i--){
while(l%i == 0){
s1 += to_string(i) + '[';
nawias++;
l /= i;
}
}
if(l > 1) DziewiecPoc(l);
else{
s1.pop_back();
s1 += 'F';
nawias--;
}
for(int i = 0; i < nawias; i++) s1 += ']';
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
Floor(N);
Poczatek(N);
cout << s1 << 'B';
for(int i = 1; i < N; i++) cout << s[i][0] << s[i][1] << 'B';
cout << s[N][0];
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <bits/stdc++.h> #define MAX_N 50007 using namespace std; string s[MAX_N][2]; string s1; void Dziewiec(int N){ int nawias0 = 0, nawias1 = 0; int nine; int l = N; while(l){ nine = l%9; if(nine){ if(nine > 1){ s[N][0] += to_string(nine) + 'D'; if(nine > 2) s[N][1] += to_string(nine) + "BF"; else s[N][1] += "BFBF"; }else{ if(s[N][0].size()){ s[N][0].pop_back(); nawias0--; } s[N][0] += 'D'; s[N][1] += "BF"; } } l/=9; if(l){ s[N][0] += "9["; s[N][1] += "9["; nawias0++; nawias1++; } } for(int i = 0; i < nawias0; i++) s[N][0] += ']'; for(int i = 0; i < nawias1; i++) s[N][1] += ']'; } void Floor(int N){ s[1][0] = 'D'; s[1][1] = "BF"; s[2][1] = "BFBF"; for(int i = 1; i <= N; i++){ if(s[i][0].empty()) Dziewiec(i); for(int j = 2; j < 10; j++){ if(s[i][0].size() > 1) s1 = to_string(j) + '[' + s[i][0] + ']'; else s1 = to_string(j) + s[i][0]; if(s[i*j][0].empty() || s[i*j][0].size() > s1.size()) s[i*j][0] = s1; s1 = to_string(j) + '[' + s[i][1] + ']'; if(s[i*j][1].empty() || s[i*j][1].size() > s1.size()) s[i*j][1] = s1; } } } void DziewiecPoc(int N){ int nawias = 0; int nine; int l = N; string s2 = ""; while(l){ nine = l%9; if(nine){ if(nine > 1){ s2 += to_string(nine) + 'F'; }else{ if(s2.size()){ s2.pop_back(); nawias--; } s2 += 'F'; } } l/=9; if(l){ s2 += "9["; nawias++; } } for(int i = 0; i < nawias; i++) s2 += ']'; s1 += s2; } void Poczatek(int N){ int nawias = 0; int l = N; s1 = ""; for(int i = 9; i >= 2; i--){ while(l%i == 0){ s1 += to_string(i) + '['; nawias++; l /= i; } } if(l > 1) DziewiecPoc(l); else{ s1.pop_back(); s1 += 'F'; nawias--; } for(int i = 0; i < nawias; i++) s1 += ']'; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; Floor(N); Poczatek(N); cout << s1 << 'B'; for(int i = 1; i < N; i++) cout << s[i][0] << s[i][1] << 'B'; cout << s[N][0]; return 0; } |
English