#include <bits/stdc++.h> #define ll long long using namespace std; string lit(int x)// litera odpowiadajacemu kierunkowi x*60 stopni ccw { string ret; x %= 6; if(x <= 0) x += 6; ret += 'A' + 6-x; return ret; } string razy(ll n, string s)// n razy robimy s { if(!n) return ""; if(n == 1ll) return s; if(n <= 9ll) { string ret; ret += '0'+n; if((int)s.length() == 1) ret += s; else ret += "[" + s + "]"; return ret; } if(n%9ll) return razy(n%9ll, s) + razy(n-n%9ll, s); return "9[" + razy(n/9ll, s) + "]"; } string solve(ll n, int kier)// trojkat o boku n bez podstawy, zaczynamy w lewym rogu, konczymy w prawym; kier obraca calosc ccw o 60 stopni { kier %= 6; if(n == 1ll) return lit(kier+1)+lit(kier-1); string ret; if(n&1ll) { ret += razy(n, lit(kier+1)); ret += "2[" + solve(n>>1ll, kier-2) + "]"; ret += razy(n-1ll, lit(kier-1)+lit(kier+1)); ret += razy(n>>1ll, razy(n>>1ll, lit(kier+2)) + lit(kier-2) + razy((n>>1ll)-1ll, lit(kier)+lit(kier-2))); ret += razy(n>>1ll, lit(kier)); ret += lit(kier-1); } else { ret += lit(kier+1); ret += solve(n-1ll, kier); ret += razy(n-1ll, lit(kier+3)); ret += lit(kier-1); ret += razy(n-1ll, lit(kier+1)+lit(kier-1)); } return ret; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n; cin >> n; string wyn = solve(n, 0); wyn += razy(n, "D"); cout << wyn; 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 | #include <bits/stdc++.h> #define ll long long using namespace std; string lit(int x)// litera odpowiadajacemu kierunkowi x*60 stopni ccw { string ret; x %= 6; if(x <= 0) x += 6; ret += 'A' + 6-x; return ret; } string razy(ll n, string s)// n razy robimy s { if(!n) return ""; if(n == 1ll) return s; if(n <= 9ll) { string ret; ret += '0'+n; if((int)s.length() == 1) ret += s; else ret += "[" + s + "]"; return ret; } if(n%9ll) return razy(n%9ll, s) + razy(n-n%9ll, s); return "9[" + razy(n/9ll, s) + "]"; } string solve(ll n, int kier)// trojkat o boku n bez podstawy, zaczynamy w lewym rogu, konczymy w prawym; kier obraca calosc ccw o 60 stopni { kier %= 6; if(n == 1ll) return lit(kier+1)+lit(kier-1); string ret; if(n&1ll) { ret += razy(n, lit(kier+1)); ret += "2[" + solve(n>>1ll, kier-2) + "]"; ret += razy(n-1ll, lit(kier-1)+lit(kier+1)); ret += razy(n>>1ll, razy(n>>1ll, lit(kier+2)) + lit(kier-2) + razy((n>>1ll)-1ll, lit(kier)+lit(kier-2))); ret += razy(n>>1ll, lit(kier)); ret += lit(kier-1); } else { ret += lit(kier+1); ret += solve(n-1ll, kier); ret += razy(n-1ll, lit(kier+3)); ret += lit(kier-1); ret += razy(n-1ll, lit(kier+1)+lit(kier-1)); } return ret; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n; cin >> n; string wyn = solve(n, 0); wyn += razy(n, "D"); cout << wyn; return 0; } |