Google Code Jam 2008 - kolo 1A
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Google Code Jam 2008 - kolo 1AGoogle Code Jam 2008 - kolo 1A

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

Google Code Jam 2008 - kolo 1A

Google       Google       24. 8. 2008       16 563×

Google Code Jam po cvičení a kvalifikaci pokračuje prvním kolem.

Reklama
Reklama

Nejmenší skalární součin

Zadání: Máme dva vektory (x1, x2, …, xn) a (y1, y2, …, yn), jejichž skalární součin je definován jako x1y1 + x2y2 + … + xnyn. Naším úkolem je získat minimální možný skalární součin těchto vektorů, pokud si pořadí jejich souřadnic můžeme uspořádat podle libosti. Řešení

Řešení je jednoduché: stačí si souřadnice vektorů uspořádat podle velikosti a pronásobit spolu největší souřadnici prvního vektoru s nejmenší souřadnicí druhého vektoru, potom druhou největší s druhou nejmenší a tak dále.

function scalar_product($vector1, $vector2) {
	sort($vector1);
	rsort($vector2);
	$product = 0;
	foreach ($vector1 as $key => $v1) {
		$product = bcadd($product, bcmul($v1, $vector2[$key]));
	}
	return $product;
}

U velkého vstupu narazíme na jediný problém – u vysokých čísel se ztrácí požadovaná přesnost, proto používáme knihovnu BC Math.

Mléčné koktejly

Zadání: V obchodě připravujeme mléčné koktejly vyrobené z N příchutí. Každý z nich může být buď sladový nebo bezsladový, celkem tedy dokážeme vyrobit 2N koktejlů. Každý z našich zákazníků má oblíbené nějaké koktejly, z nichž maximálně jeden ve sladové variantě. Musíme připravit N dávek koktejlů (pro každou příchuť) tak, aby si každý zákazník vybral alespoň jeden oblíbený koktejl. Naším úkolem je zjistit, jestli můžeme připravit dávky koktejlů tak, abychom zákazníky uspokojili, a pokud ano, tak které příchutě máme připravit v jaké variantě, aby celkový počet sladových dávek byl co nejmenší. Řešení

Řešení: Vzhledem k tomu, že sladovou příchuť může mít každý zákazník rád jenom jednu, tak stačí vyřešit zákazníky, kteří mají rádi právě jednu příchuť. Tu zafixujeme a projdeme ostatní zákazníky – pokud jim volba vyhovuje, tak se o ně už dál nemusíme starat. Pokud jim nevyhovuje, tak pro ně musíme vyzkoušet jejich ostatní možnosti.

/** Určení sladových příchutí koktejlů
* @param int $tastes počet různých příchutí
* @param array $customers pole $num => array(array($taste => $malted, ...), ...)
* @return array označení sladových koktejlů nebo array("IMPOSSIBLE"), pokud nejde zákazníkům vyhovět
*/
function milkshakes($tastes, $customers) {
	$malted = array_fill(1, $tastes, 0);
	while (($picky = array_pop($customers[1]))) {
		$taste = key($picky);
		$malted[$taste] = reset($picky);
		foreach ($customers as $num => $val) {
			foreach ($val as $key => $customer) {
				if (isset($customer[$taste])) {
					if ($customer[$taste] != $malted[$taste]) {
						if ($num == 1) {
							return array("IMPOSSIBLE");
						}
						unset($customer[$taste]);
						$customers[$num-1][] = $customer;
					}
					unset($customers[$num][$key]);
				}
			}
		}
	}
	return $malted;
}

Zákazníky udržujeme organizované podle počtu příchutí, které mají rádi. Pokud jim vybraná příchuť nevyhovuje, tak je jen přesuneme do vyšší škatulky. Hotovi jsme v momentě, kdy už nemáme vybíravé zákazníky.

N-tá mocnina

Zadání: Naším úkolem je pro zadané n najít poslední tři čísla před desetinnou tečkou v čísle (3 + √5)n. Např. pro n=5 je číslo (3 + √5)5 = 3935.73982…, takže výsledek je 935. Řešení

Řešení: Pro malý vstup stačí číslo jednoduše vypočítat:

function formula_numbers($exp) {
	bcscale(30);
	return bcmod(bcpow(bcadd(3, bcsqrt(5)), $exp), 1000);
}

Kvůli potřebné přesnosti se opět používá knihovna BC Math. Problém je s velkým vstupem, kde n může být až 2 miliardy. Asi by se nějak dala použít funkce bcpowmod, ta ale pracuje jen s celými čísly.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jakub VránaAutorův profesní život se točí převážně kolem PHP. Živí se programováním v tomto jazyce, podílí se na oficiální dokumentaci, vyučuje ho na MFF UK a vede odborná školení. Poznámky si zapisuje na weblog PHP triky.
Web     Twitter     Facebook     LinkedIn    

Nové články

Obrázek ke článku Firmy musejí s nástupem Průmyslu 4.0 více dbát na kyberbezpečnost. V ohrožení je i jejich know-how.

Firmy musejí s nástupem Průmyslu 4.0 více dbát na kyberbezpečnost. V ohrožení je i jejich know-how.

Destabilizace firmy či ukradené know-how. To jsou možná hlavní budoucí rizika spojená s nedostatečnou kybernetickou bezpečností průmyslových firem, na která upozorňují experti. Vzhledem k postupující digitalizaci výrobních či technologických procesů a přechodu k takzvanému Průmyslu 4.0 může těchto hrozeb postupně přibývat. Varují před nimi i nejnovější průzkumy. 

Reklama
Reklama
Obrázek ke článku Nový CEBIT je připraven: Pochopit digitální dnešek a objevit digitální zítřek

Nový CEBIT je připraven: Pochopit digitální dnešek a objevit digitální zítřek

Nový veletrh  CEBIT je připraven. V polovině června začne v Hannoveru evropský festival obchodu s radikálně změněnou koncepcí věnovaný inovacím a digitalizaci.  CEBIT jedinečnou formou spojuje obchod v digitálním hospodářství 
s festivalovými prvky a posouvá do středu pozornosti téma digitální transformace hospodářství a společnosti.  

Obrázek ke článku Black Swan Security Congress ukáže, jak se chránit před největšími hrozbami na internetu

Black Swan Security Congress ukáže, jak se chránit před největšími hrozbami na internetu

Dva dny plné přednášek a diskusí na téma často podceňovaných bezpečnostních rizik na internetu pořádá Paralelní polis v pražských Holešovicích. Akce s názvem Black Swan Security Congress bude od pátku 18. do soboty 19. května hostit etické hackery a experty na IT bezpečnost převážně z Česka a Slovenska. Ti účastníkům vysvětlí, jaká rizika nese fenomén „černé labutě a jak se před ním mohou chránit.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý