1 条题解
-
0大金狮 (mengqingyu) LV 10 @ 2024-7-27 14:53:58
#include<bits/stdc++.h> using namespace std; const int ll=200; string f[ll][ll]; char s[200],v[20]={"0123456789"}; int n; int find(int l,int r){ int len=r-l+1; for(int i=1;i<=len;i++){ if(len%i!=0) continue; int a=l,b=l+i-1,flag=1; while(b<=r){ if(f[l][l+i-1]!=f[a][b]){ flag=0; break; } a=b+1; b=a+i-1; } if(flag){ return i; } } return 0; } int main(){ scanf("%s",s+1); n=strlen(s+1); for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) for(int k=i;k <= j;k++) f[i][j] += s[k]; for(int len = 2;len <= n;len ++) for(int l = 1;l <= n-len+1;l ++){ int r = l+len-1; for(int k = l;k < r;k ++){ if(f[l][k].size()+f[k+1][r].size()<f[l][r].size()){ f[l][r]=f[l][k]; f[l][r]+=f[k+1][r]; } } int get=find(l,r); string cun; if(get){ int num=(r-l+1)/get; while(num){ int zr=num; while(zr>=10) zr=(zr-zr%10)/10; cun+=v[zr]; if(num-10*zr>=0){ num-=10*zr; if(num==0) cun+=v[0]; } else num-=zr; } cun+="("; cun+=f[l][l+get-1]; cun+=")"; } if(cun.size()&&cun.size()<f[l][r].size()) f[l][r]=cun; } cout<<f[1][n]; return 0; }
- 1
信息
- ID
- 229
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 4
- 上传者