#include <bits/stdc++.h> using namespace std; typedef pair<int,int> PII; string convert_base9(const string & s, long long n){ string res; int cnt = 0; while(n>0){ int r = n%9; if(r>1){ res.append(to_string(r)); if(s.size() > 1) res.append("["); res.append(s); if(s.size() > 1) res.append("]"); } else if(r == 1){ res.append(s); } n /= 9; if(n>0){ res.append("9["); cnt++; } } while(cnt--) res.append("]"); return res; } string convert(const string & s, long long n){ return convert_base9(s, n); } string brutbrut(long long n){ string res; for(int level=n-1;level>=0;level--){ res.append(convert("AE", level)); res.append("A"); res.append(convert("C", level)); } return res; } string ans; void solve(long long n){ if(n <= 2) ans += brutbrut(n); else if(n%2){ ans += "AE"; solve(n-1); ans += convert("CE", n-2); ans += "C"; ans += convert("A", n-1); } else{ long long m = n/2-1; ans += convert("AE", m); ans += "A"; ans += convert("C", m); ans += "2["; solve(m); ans += "]"; ans += convert("E", m); ans += convert("C", m); string row; row += convert("E", m+1); row += convert("AC", m); row += "A"; ans += convert(row, m+1); ans += convert("CA", m+1); } } int main(){ ios_base::sync_with_stdio(0); long long n; cin>>n; solve(n); ans += convert("E", n); ans += convert("C", n); cout<<ans<<endl; //cerr<<ans.size()<<endl; }
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 | #include <bits/stdc++.h> using namespace std; typedef pair<int,int> PII; string convert_base9(const string & s, long long n){ string res; int cnt = 0; while(n>0){ int r = n%9; if(r>1){ res.append(to_string(r)); if(s.size() > 1) res.append("["); res.append(s); if(s.size() > 1) res.append("]"); } else if(r == 1){ res.append(s); } n /= 9; if(n>0){ res.append("9["); cnt++; } } while(cnt--) res.append("]"); return res; } string convert(const string & s, long long n){ return convert_base9(s, n); } string brutbrut(long long n){ string res; for(int level=n-1;level>=0;level--){ res.append(convert("AE", level)); res.append("A"); res.append(convert("C", level)); } return res; } string ans; void solve(long long n){ if(n <= 2) ans += brutbrut(n); else if(n%2){ ans += "AE"; solve(n-1); ans += convert("CE", n-2); ans += "C"; ans += convert("A", n-1); } else{ long long m = n/2-1; ans += convert("AE", m); ans += "A"; ans += convert("C", m); ans += "2["; solve(m); ans += "]"; ans += convert("E", m); ans += convert("C", m); string row; row += convert("E", m+1); row += convert("AC", m); row += "A"; ans += convert(row, m+1); ans += convert("CA", m+1); } } int main(){ ios_base::sync_with_stdio(0); long long n; cin>>n; solve(n); ans += convert("E", n); ans += convert("C", n); cout<<ans<<endl; //cerr<<ans.size()<<endl; } |