#include<bits/stdc++.h> using namespace std; string repeat(string s, long long k) { if (k == 0) return ""; if (k == 1) return s; if (2 <= k and k <= 9) return to_string(k) + "[" + s + "]"; return repeat(repeat(s, k / 9), 9) + repeat(s, k % 9); } string draw_width_2_strip_without_stroke(long long n) { string seq = repeat("FBFDD", n - 3); seq += "FBFDFDBD"; return seq; } string draw_width_1_strip_without_stroke(long long n) { return repeat("FD", n - 1); } map<char, char> rotations { {'A', 'F'}, {'B', 'E'}, {'C', 'D'}, {'D', 'C'}, {'E', 'B'}, {'F', 'A'} }; string rotate(string x) { for (char &c : x) if (c >= 'A' and c <= 'F') c = rotations[c]; return x; } string draw_1_side_triangle(long long n); string draw_2_side_triangle(long long n); string draw_1_side_triangle(long long n) { if (n == 1) return "A"; if (n == 2) return "AEACA"; long long l = (n - 1) / 2; string subroutine = draw_2_side_triangle(l); string ans = repeat(subroutine, 2); if (n % 2 == 1) ans += draw_width_1_strip_without_stroke(n); else ans += draw_width_2_strip_without_stroke(n); // draw rhombus string rhombus = repeat(repeat("B", l) + repeat("DF", l - 1) + "D", l); rhombus += repeat("F", l + 1); ans += rhombus; if (n % 2 == 0) ans += "F"; return rotate(ans); } string draw_2_side_triangle(long long n) { if (n == 1) return "FB"; if (n == 2) return "FBFDFBB"; long long l = (n - 1) / 2; string subroutine = draw_1_side_triangle(l); string ans = repeat(subroutine, 2); // rhombus no. 1 string rhombus1; if (n % 2 == 0) rhombus1 = repeat("AAECECE", l); else rhombus1 = repeat("AECE", l); // rhombus no. 2 string rhombus2 = repeat(repeat("C", l) + repeat("EA", l) + "E", l); // rhombus no. 3 string rhombus3; if (n % 2 == 0) rhombus3 = repeat("AC", l) + "A" + repeat("E", l + 1) + repeat("AC", l + 1) + "A" + repeat("E", l + 2); else rhombus3 = repeat("AC", l) + "A" + repeat("E", l + 1); ans = ans + rhombus1 + rhombus2 + rhombus3; return rotate(ans); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); long long n; cin >> n; cout << draw_2_side_triangle(n) + repeat("D", n) << "\n"; }
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 | #include<bits/stdc++.h> using namespace std; string repeat(string s, long long k) { if (k == 0) return ""; if (k == 1) return s; if (2 <= k and k <= 9) return to_string(k) + "[" + s + "]"; return repeat(repeat(s, k / 9), 9) + repeat(s, k % 9); } string draw_width_2_strip_without_stroke(long long n) { string seq = repeat("FBFDD", n - 3); seq += "FBFDFDBD"; return seq; } string draw_width_1_strip_without_stroke(long long n) { return repeat("FD", n - 1); } map<char, char> rotations { {'A', 'F'}, {'B', 'E'}, {'C', 'D'}, {'D', 'C'}, {'E', 'B'}, {'F', 'A'} }; string rotate(string x) { for (char &c : x) if (c >= 'A' and c <= 'F') c = rotations[c]; return x; } string draw_1_side_triangle(long long n); string draw_2_side_triangle(long long n); string draw_1_side_triangle(long long n) { if (n == 1) return "A"; if (n == 2) return "AEACA"; long long l = (n - 1) / 2; string subroutine = draw_2_side_triangle(l); string ans = repeat(subroutine, 2); if (n % 2 == 1) ans += draw_width_1_strip_without_stroke(n); else ans += draw_width_2_strip_without_stroke(n); // draw rhombus string rhombus = repeat(repeat("B", l) + repeat("DF", l - 1) + "D", l); rhombus += repeat("F", l + 1); ans += rhombus; if (n % 2 == 0) ans += "F"; return rotate(ans); } string draw_2_side_triangle(long long n) { if (n == 1) return "FB"; if (n == 2) return "FBFDFBB"; long long l = (n - 1) / 2; string subroutine = draw_1_side_triangle(l); string ans = repeat(subroutine, 2); // rhombus no. 1 string rhombus1; if (n % 2 == 0) rhombus1 = repeat("AAECECE", l); else rhombus1 = repeat("AECE", l); // rhombus no. 2 string rhombus2 = repeat(repeat("C", l) + repeat("EA", l) + "E", l); // rhombus no. 3 string rhombus3; if (n % 2 == 0) rhombus3 = repeat("AC", l) + "A" + repeat("E", l + 1) + repeat("AC", l + 1) + "A" + repeat("E", l + 2); else rhombus3 = repeat("AC", l) + "A" + repeat("E", l + 1); ans = ans + rhombus1 + rhombus2 + rhombus3; return rotate(ans); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); long long n; cin >> n; cout << draw_2_side_triangle(n) + repeat("D", n) << "\n"; } |