<?php
/********************************
*** FACEBOOK HACKER CUP -2012 ***
*** QUALIFICATION ROUND ***
*** BillBoard Problem ***
*** C0DER: WHIZZZKID ***
*** http://n...content-available-to-author-only...a.in/ ***
********************************/
$ip = fopen('php://stdin', "r"); //input resource can be a file $op = fopen('php://stdout',"w"); //output resource can be a file $c = 0;
while($c < $test_cases){
$cc = $c+1; //just for outputting correct case #n
$type = (string)$string; //dealing with numbers in the input string
unset($vals); //to make sure of garbage vals $words = count($vals); //word count $bill_area = $w * $h;
$max_size = floor(sqrt($bill_area / $chars)); if($max_size < 1){ //last minute optimization improved performance
$status = 1;
}else{
$rows = floor($h / $max_size); $cols = floor($w / $max_size); }
while(($rows * $cols) < $chars){ //optimizing... this was a winner!...
$max_size--;
$rows = floor($h / $max_size); $cols = floor($w / $max_size); }
while($status !== 1){
$c_cl = $cols; //it is basically current_columns
for($i=0; $i<$words; $i++){
//if we decremented the max_size to 0 there is no point checking further... last minute addition
if($max_size < 1){
$status =1;
break 2;
}
//checking if the i th word cannot be accomodated in a single line
if($cols < (strlen($vals[$i]))){ $rows = floor($h / $max_size); $cols = floor($w / $max_size); break;
}
//accomodating the new word
if($c_cl == $cols){
$c_cl = $c_cl - (strlen($vals[$i])); //if it is a new line }else{
$c_cl = $c_cl - (strlen($vals[$i])) -1; //-1 is the space between the new and the old word }
//backtracking if we made a wrong accommodation
if($c_cl < 0){
$rows--;
$c_cl = $cols - (strlen($vals[$i])); }
//if we are out of rows
if($rows < 1){ //had to be placed here after error generated by backtracking in the last row
$max_size--;
$rows = floor($h / $max_size); $cols = floor($w / $max_size); break;
}
if($i == ($words-1)){
$status =1;
break 2;
}
}
}
if($status ==1){
$status = 0;
}
$c++; //incrementing the while loop
}
?>
PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiogRkFDRUJPT0sgSEFDS0VSIENVUCAtMjAxMiAqKioKKioqICAgIFFVQUxJRklDQVRJT04gUk9VTkQgICAgKioqCioqKiAgICAgQmlsbEJvYXJkIFByb2JsZW0gICAgICoqKgoqKiogICAgIEMwREVSOiBXSElaWlpLSUQgICAgICAqKioKKioqICBodHRwOi8vbi4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5pbi8gICoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiRpcCA9IGZvcGVuKCdwaHA6Ly9zdGRpbicsICJyIik7CQkvL2lucHV0IHJlc291cmNlIGNhbiBiZSBhIGZpbGUKJG9wID0gZm9wZW4oJ3BocDovL3N0ZG91dCcsInciKTsJCS8vb3V0cHV0IHJlc291cmNlIGNhbiBiZSBhIGZpbGUKJHRlc3RfY2FzZXMgPSB0cmltKGZnZXRzKCRpcCkpOwkJCS8vZmlyc3QgbGluZQokYyA9IDA7Cgp3aGlsZSgkYyA8ICR0ZXN0X2Nhc2VzKXsKCSRjYyA9ICRjKzE7CQkJCS8vanVzdCBmb3Igb3V0cHV0dGluZyBjb3JyZWN0IGNhc2UgI24KCSRpbnB1dCA9IHRyaW0oZmdldHMoJGlwKSk7CgkkdmFscyA9IGV4cGxvZGUoIiAiLCAkaW5wdXQpOwoJJHcgPSBhcnJheV9zaGlmdCgkdmFscyk7CgkkaCA9IGFycmF5X3NoaWZ0KCR2YWxzKTsKCSRzdHJpbmcgPSB0cmltKGltcGxvZGUoIiAiLCR2YWxzKSk7CgkkdHlwZSA9IChzdHJpbmcpJHN0cmluZzsJCS8vZGVhbGluZyB3aXRoIG51bWJlcnMgaW4gdGhlIGlucHV0IHN0cmluZwoJJHN0ciA9IHN0cl9yZXBsYWNlKCIgIiwiIiwkdHlwZSk7Cgl1bnNldCgkdmFscyk7CQkJCS8vdG8gbWFrZSBzdXJlIG9mIGdhcmJhZ2UgdmFscwoJJHZhbHMgPSBleHBsb2RlKCIgIiwgJHR5cGUpOwoJJHdvcmRzID0gY291bnQoJHZhbHMpOwkJCS8vd29yZCBjb3VudAoJJGJpbGxfYXJlYSA9ICR3ICogJGg7CgkkY2hhcnMgPSBzdHJsZW4oJHN0cik7CgkkbWF4X3NpemUgPSBmbG9vcihzcXJ0KCRiaWxsX2FyZWEgLyAkY2hhcnMpKTsKCWlmKCRtYXhfc2l6ZSA8IDEpewkJCS8vbGFzdCBtaW51dGUgb3B0aW1pemF0aW9uIGltcHJvdmVkIHBlcmZvcm1hbmNlCgkJJHN0YXR1cyA9IDE7Cgl9ZWxzZXsKCQkkcm93cyA9IGZsb29yKCRoIC8gJG1heF9zaXplKTsKCQkkY29scyA9IGZsb29yKCR3IC8gJG1heF9zaXplKTsKCX0KCXdoaWxlKCgkcm93cyAqICRjb2xzKSA8ICRjaGFycyl7CS8vb3B0aW1pemluZy4uLiB0aGlzIHdhcyBhIHdpbm5lciEuLi4KCQkkbWF4X3NpemUtLTsKCQkkcm93cyA9IGZsb29yKCRoIC8gJG1heF9zaXplKTsKCQkkY29scyA9IGZsb29yKCR3IC8gJG1heF9zaXplKTsKCX0KCXdoaWxlKCRzdGF0dXMgIT09IDEpewoJCSRjX2NsID0gJGNvbHM7CQkJLy9pdCBpcyBiYXNpY2FsbHkgY3VycmVudF9jb2x1bW5zCgkJZm9yKCRpPTA7ICRpPCR3b3JkczsgJGkrKyl7CgkJCS8vaWYgd2UgZGVjcmVtZW50ZWQgdGhlIG1heF9zaXplIHRvIDAgdGhlcmUgaXMgbm8gcG9pbnQgY2hlY2tpbmcgZnVydGhlci4uLiBsYXN0IG1pbnV0ZSBhZGRpdGlvbgoJCQlpZigkbWF4X3NpemUgPCAxKXsKCQkJCSRzdGF0dXMgPTE7CgkJCQlicmVhayAyOwoJCQl9CgkJCS8vY2hlY2tpbmcgaWYgdGhlIGkgdGggd29yZCBjYW5ub3QgYmUgYWNjb21vZGF0ZWQgaW4gYSBzaW5nbGUgbGluZSAKCQkJaWYoJGNvbHMgPCAoc3RybGVuKCR2YWxzWyRpXSkpKXsKCQkJCSRtYXhfc2l6ZSA9IGZsb29yKCR3IC8gKHN0cmxlbigkdmFsc1skaV0pKSk7CgkJCQkkcm93cyA9IGZsb29yKCRoIC8gJG1heF9zaXplKTsKCQkJCSRjb2xzID0gZmxvb3IoJHcgLyAkbWF4X3NpemUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJLy9hY2NvbW9kYXRpbmcgdGhlIG5ldyB3b3JkCgkJCWlmKCRjX2NsID09ICRjb2xzKXsKCQkJCSRjX2NsID0gJGNfY2wgLSAoc3RybGVuKCR2YWxzWyRpXSkpOyAvL2lmIGl0IGlzIGEgbmV3IGxpbmUKCQkJfWVsc2V7CgkJCQkkY19jbCA9ICRjX2NsIC0gKHN0cmxlbigkdmFsc1skaV0pKSAtMTsgLy8tMSBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgbmV3IGFuZCB0aGUgb2xkIHdvcmQKCQkJfQoJCQkKCQkJLy9iYWNrdHJhY2tpbmcgaWYgd2UgbWFkZSBhIHdyb25nIGFjY29tbW9kYXRpb24KCQkJaWYoJGNfY2wgPCAwKXsKCQkJCSRyb3dzLS07CgkJCQkkY19jbCA9ICRjb2xzIC0gKHN0cmxlbigkdmFsc1skaV0pKTsKCQkJfQoJCQkvL2lmIHdlIGFyZSBvdXQgb2Ygcm93cwoJCQlpZigkcm93cyA8IDEpewkJLy9oYWQgdG8gYmUgcGxhY2VkIGhlcmUgYWZ0ZXIgZXJyb3IgZ2VuZXJhdGVkIGJ5IGJhY2t0cmFja2luZyBpbiB0aGUgbGFzdCByb3cKCQkJCSRtYXhfc2l6ZS0tOwoJCQkJJHJvd3MgPSBmbG9vcigkaCAvICRtYXhfc2l6ZSk7CgkJCQkkY29scyA9IGZsb29yKCR3IC8gJG1heF9zaXplKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmKCRpID09ICgkd29yZHMtMSkpewoJCQkJJHN0YXR1cyA9MTsKCQkJCWJyZWFrIDI7CgkJCX0KCQl9Cgl9CglpZigkc3RhdHVzID09MSl7CgkJZndyaXRlKCRvcCwgc3ByaW50ZigiQ2FzZSAjJWQ6ICVkXG4iLCAkY2MsICRtYXhfc2l6ZSkpOwoJCSRzdGF0dXMgPSAwOwoJfQoJJGMrKzsJCQkJCS8vaW5jcmVtZW50aW5nIHRoZSB3aGlsZSBsb29wCn0KPz4=
NgoyMCA2IGhhY2tlciBjdXAKMTAwIDIwIGhhY2tlciBjdXAgMjAxMwoxMCAyMCBNVVNUIEJFIEFCTEUgVE8gSEFDSwo1NSAyNSBDYW4geW91IGhhY2sKMTAwIDIwIEhhY2sgeW91ciB3YXkgdG8gdGhlIGN1cAo0IDQgQWIgQ2Q=
6
20 6 hacker cup
100 20 hacker cup 2013
10 20 MUST BE ABLE TO HACK
55 25 Can you hack
100 20 Hack your way to the cup
4 4 Ab Cd