Google Code Jam: o kousek...
Tak jsem se přihlásil do GCJ, a pak s překvapením zjistil že mám posledních 35 minut do deadlinu :). Takže jsem se vrhnul k Eclipsu a začal kódit úlohu A - universe. No, hotovo bylo 4 minuty před deadlinem, ale oiga - výstup neakceptován...
Oprava bugu spočívala v umazání jednoho sčítance, ale bohužel, nezadařilo se do termínu :). Tak aspoň dirty kód pro potěchu:
function rln() {
static $fpointer = 0;
global $file_in;
$line = $file_in[$fpointer++];
return ereg_replace("\r\n","",$line);
}
function arr_write(array $arr) {
$out = "";
foreach ($arr as $a) {
$out .= $a . "\r\n";
}
echo $out;
return $out;
}
function max_first_occurence(array $needles, array $haystack, $start = 0) {
$max = count($haystack)+1;
$haystack = array_slice($haystack, $start, count($haystack) - $start, true );
$pos = array();
foreach($needles as $index=>$needle) {
$pos[$index] = array_search($needle, $haystack);
if ($pos[$index]===FALSE) {
$pos[$index]=$max;
}
}
asort($pos);
$keys = array_keys($pos);
return array( "index" => end($keys), "pos"=> $pos[end($keys)] );
}
$argc = $_SERVER['argc'];
$argv = $_SERVER['argv'];
if ($argc<1) {
echo 'zadej soubor';
exit(1);
}
$filename_in = $argv[1];
$file_in = file($filename_in);
$cases = rln();
for ($case = 0; $case<$cases; $case++) {
$engines = rln();
$engine = array();
for ($i=0; $i<$engines; $i++) {
$engine[] = rln();
}
$queries = rln();
$query = array();
for ($i=0; $i<$queries; $i++) {
$query[] = rln();
}
//algorithm
//echo "----------".($case+1)."----------\n";
$changes = -1;
$done = false;
$pos = 0;
while (!$done) {
$res = max_first_occurence($engine, $query, $pos);
$ppos = $pos;
$se = $res["index"];
$pos = $res["pos"];
//echo(" ".($ppos+1)." - $pos : {$engine[$se]} \n");
if ($pos>count($query)) {$done = true;}
$changes++;
}
//echo "-------\n";
echo "Case #". ($case+1) .": ".$changes."\n";
}
- 198x přečteno



Komentáře/Comments
Poslat nový komentář