問題
http://community.topcoder.com/stat?c=problem_statement&pm=8087&rd=10791
解き方
全探索可能なので解くだけ。
コード
class StringFragmentation {
public: int largestFontSize(string text, int width, int height) {
vector<int> vx;
stringstream out(text);
for(string str;out>>str;){
vx.push_back(str.size());
}
int n=vx.size();
for(int i=5000;i>=8;i--){
int at=0,lines=0;
while(at<n){
int cur=0;
if(vx[at]*(i+2)<=width){
cur+=vx[at]*(i+2);
}else break;
while(at+1<n && cur+(vx[at+1]+1)*(i+2)<=width){
cur+=(vx[at+1]+1)*(i+2);
at++;
}
lines++;
at++;
}
if(at>=n && lines*2*i<=height)return i;
}
return -1;
}
}
public: int largestFontSize(string text, int width, int height) {
vector<int> vx;
stringstream out(text);
for(string str;out>>str;){
vx.push_back(str.size());
}
int n=vx.size();
for(int i=5000;i>=8;i--){
int at=0,lines=0;
while(at<n){
int cur=0;
if(vx[at]*(i+2)<=width){
cur+=vx[at]*(i+2);
}else break;
while(at+1<n && cur+(vx[at+1]+1)*(i+2)<=width){
cur+=(vx[at+1]+1)*(i+2);
at++;
}
lines++;
at++;
}
if(at>=n && lines*2*i<=height)return i;
}
return -1;
}
}