Zadání úloh oblastního kola 42. ročníku
P-II-1
Města A a B jsou spojena rovným úsekem cesty. Na této cestě leží města
A
1, ..., A
n, B
1, ..., B
n (ne
nutně v tomto pořadí, ale vždy je město
A
i blíže k A než město B
i (1<=i<=n)).
Nákladní auto jezdí mezi A a B a má
n objednávek; i. tá (1<=i<=n) objednávka je převézt náklad
z A
i do B
i; přitom auto může vézt vždy
nejvýše jeden náklad a po naložení v A
i
ho může vyložit jedině v B
i.
Jízdou nákladního auta rozumíme cestu auta z města A do města B (s případným
splněním některých objednávek) a zpět; během jízdy lze změnit směr jen
v městě B.
Napište a zdůvodněte program, který pro zadané vzdálenosti
měst Ai a Bi od A
sestaví plán nákladního auta (tj. určí počet jízd a splněné objednávky pro
každou jízdu) tak, aby splnilo všechny objednávky minimálním počtem jízd.
P-II-2
Body X1=(x1,y1), ...,
Xn=(xn,yn) (n>=3)
tvoří (v tomto pořadí) vrcholy
konvexního n-úhelníka M v rovině.
Napište a zdůvodněte program, který určí délku strany čtverce S s následujícími
vlastnostmi:
- S pokrývá M
- alespoň jedna strana M leží na straně S
- S má nejmenší možný obsah
Poznámka
V programu můžete použít vzorce z analytické geometrie (např.
pro vzdálenost 2 bodů, vzdálenost bodu od přímky, apod.) jako funkce.
Tyto funkce nemusíte programovat.
P-II-3
Multiplikativní složitost
Lineární algoritmus je algoritmus následujícího tvaru:
Vstup: x
1, x
2, ..., x
n (vstupní proměnné)
f
1:=g
1 op h
1
f
2:=g
2 op h
2
....
f
k:=g
k op h
k
Výstup: y
1, y
2, ..., y
m (výstupní proměnné)
přičemž pro každé i=1, ..., k je g
i, h
i prvkem
{x
1, ..., x
n} U {f
1, ..., f
i-1}
a op je jedna z operací +, -, * (sčítání, odčítání, násobení).
Složitost lineárního algoritmu je počet operací op, multiplikativní složitost
lineárního algoritmu je počet operací *.
Například následující lineární algoritmus:
Vstup: a, b, c, d
f1 := a * b
f2 := c * d
f3 := f1 - f2
Výstup: f3
počítá hodnotu výrazu ab-cd a má multiplikativní složitost 2.
Úlohy
- Zjistěte, jakou činnost vykonává následující lineární algoritmus:
Vstup: a11, a12, a21, a22, b11, b12, b21, b22
f1:=a11+a22
f2:=b11+b22
f3:=a21+a22
f4:=b12-b22
f5:=b21-b11
f6:=a11+a12
f7:=a21-a11
f8:=b11+b12
f9:=a12-a22
f10:=b21+b22
f11:=f1*f2
f12:=f3*b11
f13:=a11*f4
f14:=a22*f5
f15:=f6*b22
f16:=f7*f8
f17:=f9*f10
f18:=f11+f14
f19:=f15-f17
f20:=f11+f13
f21:=f12-f16
f22:=f18-f19
f23:=f12+f14
f24:=f13+f15
f25:=f20-f21
Výstup: f22, f23, f24, f25
- Najděte lineární algoritmus s co nejmenší multiplikativní složitostí,
který pro vstup x1, ..., xn,
y1, ..., yn, u1, ..., un,
v1, ..., vn vypočítá:
x1u1+x2u2+...+xnun
x1v1+x2v2+...+xnvn
y1u1+y2u2+...+ynun
y1v1+y2v2+...+ynvn
P-II-4
McCullochův stroj
McCullochův stroj slouží ke zpracování čísel. Má vstup a výstup; jestiže
na vstup dáme číslo, tj. konečnou neprázdnou posloupnost cifer 1, 2, ..., 9,
po konečném čase se na výstupu může (ale nemusí) objevit (obecně jiné) číslo -
odpověď stroje na vstupní číslo. V prvním případě (jestliže se odpověď objeví),
vstupní číslo se nazývá přijatelným. Odpověď stroje je vstupním číslem jednoznačně
určená:
- jestliže je vstupní číslo přijatelné, odpověď se objeví vždy a je vždy stejná.
- jestliže vstupní číslo není přijatelné, nikdy se neobjeví odpověď a stroj
se po konečném čase zastaví (tj. můžeme zjistit, že vstupní číslo není přijatelné).
Zavedeme si tato značení:
- Jak již bylo řečeno, čísla jsou pro nás kladná celá
čísla, jejichž desítkový zápis neobsahuje nulu.
- Jestliže X, Y jsou čísla, pak XY označuje jejich spojení: číslo, které dostaneme
napsáním zápisů čísel X, Y za sebou (v tomto pořadí). Např. pro X=53 a Y=728 je
XY=53728 a XYX=5372853. Číslo XX..X (k-krát) zapíšeme jako Xk.
- Zdvojením čísla X je číslo XX, tj. např. zdvojením čísla X=12345 je XX=1234512345.
- Říkáme, že číslo X vytváří číslo Y, jestliže X je přijatelné a po zadání X na
vstup stroje je odpovědí Y. Tento vztah budeme zkráceně zapisovat X->Y.
McCullochův stroj se řídí následujícími pravidly:
- Pravidlo P1: Pro libovolné číslo X, 2X2 je přijatelné a vytváří X (2X2->X).
- Pravidlo P2: Pro libovolná čísla X, Y, jestliže X vytváří Y, pak 7X vytváří Y2. Zkráceně: z X->Y plyne 7X->Y2.
- Pravidlo P3: Pro libovolná čísla X, Y, jestliže X vytváří Y, pak 5X vytváří
zdvojení čísla Y, tedy z X->Y plyne 5X->YY.
- Pravidlo P0: Číslo X je přijatelné pravě tehdy, když to vyplývá z pravidel
P1, P2, P3.
Například 2532->53 podle P1, 72532->532 podle P2, 572532->532532 podle P3,
ale 4253 není přijatelné podle P0.
Operační číslo je číslo složené z cifer 5, 7. Každé operační číslo M určuje
operaci M() v následujícím smyslu: z X->Y plyne MX->M(X). Např. 5 určuje
operaci zdvojení (5(Y)=YY), neboť z X->Y plyne 5X->YY. 75 určuje operaci
připsání 2 ke zdvojení (75(Y)=YY2), neboť z X->Y plyne 75X->YY2.
Úlohy
- (Craigův zákon) Pro každé operační číslo M a pro každé číslo A existuje číslo X vytvářející M(AX), tj. X->M(AX). Dokažte!
- Najděte čísla X<>Y taková, že X->Y a zároveň Y->X!
- (Fergussonův zákon) Pro libovolná A, B existují čísla X, Y tak, že X->AY a zároveň Y->BX. Dokažte!