1 条题解

  • 0
    @ 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
    标签
    递交数
    5
    已通过
    3
    上传者