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