#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int MX=15e4; const int N=1e4; int dp[2][N+10]; int g[2][N+10]; void rep(string s,long long k) { if(k==0) return; if(k==1) { cout<<s; return; } if(k<10) { if(s.size()==1) cout<<k<<s; else cout<<k<<"["<<s<<"]"; return; } if(k>N) { cout<<"9["; rep(s,k/9); cout<<"]"; if(k%9==0) return; if(k%9>1) cout<<k%9; if(s.size()==1) cout<<s; else cout<<"["<<s<<"]"; return; } if(g[s.size()-1][k]<0) { cout<<-g[s.size()-1][k]<<"["; rep(s,k/(-g[s.size()-1][k])); cout<<"]"; } else { rep(s,k-g[s.size()-1][k]); rep(s,g[s.size()-1][k]); } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n; cin>>n; for(int j:{0,1}) { dp[j][1]=j+1; for(int i=2;i<=N;i++) { dp[j][i]=dp[j][i-1]+j+1; g[j][i]=1; for(int k=2;2*k<=i;k++) { if(dp[j][i-k]+dp[j][k]<dp[j][i]) { dp[j][i]=dp[j][i-k]+dp[j][k]; g[j][i]=k; } } for(int k=2;k<=9;k++) { if(i%k==0 && dp[j][i/k]+3<dp[j][i]) { dp[j][i]=dp[j][i/k]+3; g[j][i]=-k; } } if(j==0 && i<=9) { g[j][i]=-i; dp[j][i]=2; } } } for(int i=n;i>=1;i--) { rep("D",i); rep("FB",i-1); cout<<"F"; } rep("B",n); cout<<"\n"; 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 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 100 101 102 | #include<bits/stdc++.h> #define fi first #define se second using namespace std; const int MX=15e4; const int N=1e4; int dp[2][N+10]; int g[2][N+10]; void rep(string s,long long k) { if(k==0) return; if(k==1) { cout<<s; return; } if(k<10) { if(s.size()==1) cout<<k<<s; else cout<<k<<"["<<s<<"]"; return; } if(k>N) { cout<<"9["; rep(s,k/9); cout<<"]"; if(k%9==0) return; if(k%9>1) cout<<k%9; if(s.size()==1) cout<<s; else cout<<"["<<s<<"]"; return; } if(g[s.size()-1][k]<0) { cout<<-g[s.size()-1][k]<<"["; rep(s,k/(-g[s.size()-1][k])); cout<<"]"; } else { rep(s,k-g[s.size()-1][k]); rep(s,g[s.size()-1][k]); } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n; cin>>n; for(int j:{0,1}) { dp[j][1]=j+1; for(int i=2;i<=N;i++) { dp[j][i]=dp[j][i-1]+j+1; g[j][i]=1; for(int k=2;2*k<=i;k++) { if(dp[j][i-k]+dp[j][k]<dp[j][i]) { dp[j][i]=dp[j][i-k]+dp[j][k]; g[j][i]=k; } } for(int k=2;k<=9;k++) { if(i%k==0 && dp[j][i/k]+3<dp[j][i]) { dp[j][i]=dp[j][i/k]+3; g[j][i]=-k; } } if(j==0 && i<=9) { g[j][i]=-i; dp[j][i]=2; } } } for(int i=n;i>=1;i--) { rep("D",i); rep("FB",i-1); cout<<"F"; } rep("B",n); cout<<"\n"; return 0; } |