#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; } |