#include<bits/stdc++.h> using namespace std; using LL=long long; #define FOR(i,l,r) for(int i=(l);i<=(r);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';} template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #ifdef DEBUG #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n' #else #define debug(...) {} #endif string times(LL x, const string& s) { if (x == 0) { return ""; } if (x == 1) { return s; } if (x < 9) { return to_string(x) + "[" + s + "]"; } assert(x >= 9); return "9[" + times(x / 9, s) + "]" + times(x % 9, s); } string solve_without_edge(LL n) { assert(n >= 1); if (n == 1) { return "DF"; } if (n % 2 == 1 or n < 4) { string ret; ret += "D"; ret += times(n - 1, "FD"); ret += times(n - 1, "B"); ret += solve_without_edge(n - 1); ret += "F"; return ret; } string ret; ret += times(n, "D"); ret += times(n - 1, "F"); ret += times(n / 2 - 1, "BD"); ret += times(n / 2 - 1, "B" + times(n / 2 - 1, "FB") + times(n / 2, "D")); ret += times(n - 1, "BF"); ret += times(2, solve_without_edge(n / 2 - 1)); ret += "DF"; return ret; }; string solve(LL n) { auto ret = solve_without_edge(n); ret += times(n, "B"); return ret; }; int main() { cin.tie(0)->sync_with_stdio(0); LL n; cin >> n; debug(n); auto ans = solve(n); cout << ans.data() << '\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 | #include<bits/stdc++.h> using namespace std; using LL=long long; #define FOR(i,l,r) for(int i=(l);i<=(r);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<'('<<p.first<<", "<<p.second<<')';} template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #ifdef DEBUG #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n' #else #define debug(...) {} #endif string times(LL x, const string& s) { if (x == 0) { return ""; } if (x == 1) { return s; } if (x < 9) { return to_string(x) + "[" + s + "]"; } assert(x >= 9); return "9[" + times(x / 9, s) + "]" + times(x % 9, s); } string solve_without_edge(LL n) { assert(n >= 1); if (n == 1) { return "DF"; } if (n % 2 == 1 or n < 4) { string ret; ret += "D"; ret += times(n - 1, "FD"); ret += times(n - 1, "B"); ret += solve_without_edge(n - 1); ret += "F"; return ret; } string ret; ret += times(n, "D"); ret += times(n - 1, "F"); ret += times(n / 2 - 1, "BD"); ret += times(n / 2 - 1, "B" + times(n / 2 - 1, "FB") + times(n / 2, "D")); ret += times(n - 1, "BF"); ret += times(2, solve_without_edge(n / 2 - 1)); ret += "DF"; return ret; }; string solve(LL n) { auto ret = solve_without_edge(n); ret += times(n, "B"); return ret; }; int main() { cin.tie(0)->sync_with_stdio(0); LL n; cin >> n; debug(n); auto ans = solve(n); cout << ans.data() << '\n'; } |