#include<cstdio> #include<cstring> #include<string> #include<cstdlib> using namespace std; class ABC{ public: int num[40]; bool isA[40]; string createString(int n, int k){ int n1=0,n2=0,n3=0,nt=-1; for(int i1=0;i1<n;i1++){ for(int i2=0;i2<n;i2++){ for(int i3=0;i3<n;i3++){ if(i1+i2+i3==n){ if(i1*i2+i1*i3+i2*i3>nt){ nt=i1*i2+i1*i3+i2*i3; n1=i1,n2=i2,n3=i3; } } } } } if(k>nt) return "";//判断无解 //先往“AAA..”中插入'B' string s; s.clear(); memset(num,0,sizeof(num)); nt=n2; while(k && nt){ int kt=min(n1,k); num[kt]+=1; k-=kt; nt-=1; } for(int i=0;i<nt;i++){ s+="B"; } for(int i=1;i<=n1;i++){ s+="A"; while(num[i]--){ s+="B"; } } for(int i=0;i<n1+n2;i++){ isA[i]=s[i]=='A'?true:false; } //再插入'C' memset(num,0,sizeof(num)); nt=n3; while(k && nt){ int kt=min(n1+n2,k); num[kt]+=1; k-=kt; nt-=1; } s.clear(); for(int i=0;i<nt;i++){ s+="C"; } for(int i=1;i<=n1+n2;i++){ s+=isA[i-1]?"A":"B"; while(num[i]--){ s+="C"; } } return s; } };
原文地址:http://blog.csdn.net/uestc_peterpan/article/details/43422703