1. Haina (A Div-2)
În această sarcină constrângerile împiedicat încerca pur şi simplu, toate tripletele posibile I , j , k (care nu este mai mare de 100 3 = 1000000 ), pentru a verifica fiecare triplu că toate cele trei elemente se potrivesc împreună, şi printre tripleti, în care toate elementele se potrivesc reciproc, pentru a găsi un triplu cu un minim de o am + un j + o k .
2. Suma de cifre (B Div-2)
Iniţial, cu nu mai mult de 100 000 cifre. Deci, după suma intre prima vraja utilizarea cifre nu este mai mare de 9 × 100 000 = 900 000 , puteti conta pe o simpla trecere de la linia de intrare. Prin urmare, nu va fi nici mai mult şase cifre. După al doilea număr de vraji vor fi nu mai mult de 9 × 6 = 54 . Aceasta este, numărul nu este mai mare de două cifre. Suma de cifre ale unui număr de două cifre nu este mai mare de 18 , şi suma de cifre ale numărului nu este mai mare de 18 sunt deja clare. Prin urmare, Herald nu poate folosi mai mult vraja patru ori. În acest caz, prima dată pentru a calcula suma de cifre, avem nevoie de 100 000 completări, iar restul este nesemnificativ.
3. Tema (C Div-2, A Div-1)
Pentru fiecare literă vom găsi de câte ori aceasta apare. Să " o ", a constatat k un timp, "b" apare k b ori, şi aşa mai departe. Obiectivul nostru --- să arunce toate apariţiile unui număr tot mai mare de scrisori. Să presupunem că ne-au aruncat nişte x litere. Reţineţi că, dacă, în schimb, arunca x scrisori rare, numărul total de litere va fi dat afara nu mai mult. Prin urmare, pentru orice număr x este uşor să dau seama dacă aveţi posibilitatea să eliminaţi toate apariţiile în orice zi x litere. În consecinţă, putem alege un minimanoe x , pentru care este posibil.
4. Autobuze (D Div-2, B Div-1)
Sa ne oprim pentru fiecare x de la 0 la n calcula valoarea de K x - numărul de modalităţi pentru ca acesta să ajungă. Luaţi în considerare I autobuz-lea. Numărul de moduri de a ajunge la o oprire t I la i autobuz, aparent, este pur şi simplu egal cu numărul de modalităţi de a obţine în autobuz. Şi stau în autobuz se poate opri la E I , s -am + 1, ..., t am - 1 . Astfel, numărul de moduri de a ajunge la o oprire t I la i de autobuz este suma k s I + K s I + 1 + ... + K T I - 1 . Rămâne să se constate că, în scopul de a găsi numărul total de moduri de a ajunge la statia de t I , trebuie să adauge la numărul de moduri de a ajunge la ea pe fiecare autobuz, care este ultima oprire.
Rămâne pentru a rezolva două probleme. Problemă una din urmatoarele: 0 ≤ n ≤ 10 9 , astfel încât toate k x din memorie nu este vlezut. Dar, evident, avem nevoie doar de stop cu non-zero, k x . De exemplu, puteţi comprima coordonatele pentru a crea o listă cu toate condiţiile întâlnite în staţii (precum şi staţii de 0 şi n ), după aceasta, scoate duplicat şi înlocuirea fiecare număr pentru a opri în indexul său din matrice. Apoi, se dovedeşte că toate opriri sunt numerotate în intervalul 200 001 . O serie de aceasta lungime are linişte urca în memorie.
În al doilea rând, în cazul în care suma de k s I + K s I + 1 + ... + K T I - 1 ciclu conta, soluţia va lucra pentru O ( m 2 ) , care nu se încadrează în TL. Această problemă poate fi rezolvată cu uşurinţă, de asemenea: poţi crea şi actualiza simultan cu o serie de k [] array Sum [] , care va fi suma elementelor de K până la un anumit punct: Sum [ I ] = k [0] + K [1] + ... \ & thinsp ; + K [ I - 1] . Cu alte cuvinte, Sum [0] = 0, Sum [ I + 1] = Sum [ I ] + K [ I ] . Apoi numărul de moduri de a ajunge la statia de t -am la i de autobuz este egal cu Sum [ t I ] - Sum [ i am ] .
Complexitatea soluţiei totale, O (m * log (m)) de timp (prin compresie coordona), O (m) de memorie.
5. Vector (E Div-2, C Div-1)
Reformula problema în numere complexe.
Luaţi în considerare numere complexe un = x A + IY A , b = x B + IY B şi C = x C + IY C . Cu un număr de A este permis să facă operaţiunea A → A + C şi A → iA .
Să vedem ce pot fi obţinute de la numărul de A , atunci când este aplicat la el pentru aceste operaţiuni. Deoarece i 4 = 1 , atunci numărul rezultată este de forma A · I K + curent alternativ + BIC - CC - IDC pentru unele număr întreg non-negativ k , o , b , C , d , sau, cu alte cuvinte, O · I K + curent alternativ + BIC pentru K = 0, 1, 2, 3, şi întregi o , b . Deoarece k poate fi egal doar 0 , 1 , 2 sau 3 , este suficient pentru a vedea dacă vă poate oferi unul dintre numerele B - A , B - iA , B + A sau B + iA sub formă de curent alternativ + BIC .
Rămâne să înveţe să înţeleagă este dacă un număr complex D sub forma de curent alternativ + BIC . Scris sub forma unui sistem de ecuatii liniare:
o · x C - b · y C = x D
o · Y C + b · x C = y D
Rezolva sistemul de ecuatii liniare - aceasta este o problema standard tehnic.
6. Castelul (D Div-1)
Am renumerotate nodurile, astfel încât vârful de pornire, care este initial Herald, a fost numerotate 0 .
Suspendarea copac în cauză este problema cu partea de sus a 0 , şi consideră descendenţi direcţi ai vârful. Să Gerald a început cariera de a merge la una dintre aceste topuri - top x . Apoi, după care el trebuie să evite orice subarborele acestui nod şi a reveni la ea - în caz contrar nu va călătoria peste toate nodurile. Apoi se întoarce de la un nod x la vertex 0 şi nu mai revine la acest nod. Apoi, el se întoarce în unele nod stramos 0 (cu excepţia cazului, desigur, ei încă o au), şi by-pass subarborele agăţat pe partea de sus a prezentului, şi aşa mai departe. Să presupunem că avem numărat cantitatea necesară pentru probleme similare în subarbori. Să încercăm a calcula pe această bază, cantitatea dorită pentru tot arborele. Acest lucru ne permite să rezolvăm problema de dinamica unui subarbore.
Să nodurile 0 n fii. Lasă-i k 1 , k 2 , ..., k n descendenţii (inclusiv pe ei înşişi).
Să toate copac N noduri.
Fie T I - aceasta este de două ori suma lungimilor tuturor muchiilor în I -că subarborele, inclusiv o margine la vertex 0 . Această valoare - exact timpul necesar pentru a obţine în jurul valorii de Gerald subarborelui întregul incepand de la vârful 0 şi a reveni la partea de sus a 0 .
În cele din urmă, permiteţi- T I - răspunsul la sub în I -a subarborelui. Imediat adaugă la această lungime de timp de o margine între vârful 0 şi ei I -Tym strămoş. Astfel, este timpul mediu pentru subarborele având în vedere faptul că noi trebuie să ajungă la ea încă de la început 0 .
Să presupunem că ne-am dus în jurul valorii de subarbori în ordinea 1, 2, ..., n . Care este timpul mediu de reşedinţă comoara?
Cu o probabilitate de
comori va fi primul subarborelui. Apoi, timpul mediu de comoara va fi T 1 .

Cu probabilitate
va fi o comoară în subarborele secunde. Apoi, timpul mediu de comoara va fi T 1 + T 2 .

Şi aşa mai departe. Astfel, timpul mediu pentru a găsi comoara va fi

Să vedem dacă vă puteţi îmbunătăţi această dată? Swap numărul subarbore i şi eu + 1 . Apoi dispar din suma pe termen K I + 1 T I şi vor fi pe termen k iT I + 1 . Aceasta este, suma despre schimbarea k iT I + 1 - K I + 1 T I . Suma va scădea în cazul în care schimbarea este mai mică decât 0, care este, dacă k iT I + 1 - K I + 1 T I <0 , ceea ce este echivalent
.

Astfel, timpul mediu pentru a găsi comoara nu poate fi redusă dacă subarbori sunt sortate în ordine crescătoare de mărime
, sau o pereche de subarbori adiacente, înlocuind unele locuri care vor duce la rezultate mai bune. Astfel, noi trebuie să sortaţi subarbori din această cantitate, şi să le evite această ordine.

7. Dulciuri şi pietre. (E Div-1)
Esenţa problemei este că există un consiliu de n × m , în cazul în care veţi găsi numărul. Şi trebuie să treci de la celula (0, 0) la celula de ( n - 1, m - 1) , efectuarea misca un pătrat în sus sau în dreapta (de exemplu, în creştere de 1 una din coordonate), astfel încât suma numerelor din celulele de călătorie a fost este maximă.
Sarcina noastră este de a determina n + m - 1 celule calea optimă. Să începem mici: vom defini o singura celula de această cale, şi anume media. Să
. Ce sunt celulele de câmp poate fi k -tymi? Evident, cei a căror sumă de coordonate este egal cu k , că este, acesta va fi un dreptunghi diagonală. Prin urmare, este evident că dinamica simplă a O (nm) în triunghiul inferior de mai jos această diagonală pentru a calcula ce suma maximă care poate fi tastat, venind în fiecare celulă din această diagonală. Dinamica similare în triunghiul de sus (de data aceasta din partea de sus în jos) pentru fiecare celulă pe diagonala calcula ce suma maximă pe care se pot aduna, au început cu această celulă. Adăugarea acestor două cantităţi, se obţine suma maximă care poate fi obţinută prin care trece prin această casetă. Rămâne, să găsească o celulă ( x , y ) , în care nivelul maxim. Ne luaţi pentru k -Thuja celulă a călătoriei noastre. Reţineţi că pentru această repetare, am folosit O (( n + m ) 2 ) timp şi O ( n + m ) de memorie.

Acum trecem la subproblems recursiv, că este, căutăm calea optimă din celula (0, 0) la celula ( x , y ) , şi de la celula ( x , y ), în celulă ( n , m ) .
Rămâne să demonstreze că această soluţie este soluţia de (( n + m ) 2 ) de timp.
Notăm n + m pentru R .
La primul nivel de recursie ne petrecem r 2 ori. Al doilea - de două ori
. La a treia - de 4 ori
, şi aşa mai departe. Tot timpul vor fi cheltuite
. Astfel, soluţia descrisă este O (( n + m ), 2 ), de timp şi, evident, este nevoie de O ( n + m ) de memorie.



De fapt, ai facut o treaba excelenta - un set de sarcini se răcească şi analiză calitativă uşor de înţeles. Vă mulţumim pentru acest lucru.
Aştept cu nerăbdare să parsarea sarcini D şi E.
În acest caz, (aparent) s [t] - s [f]> =- mod, prin urmare, suficient pentru a adăuga mod o singură dată.
>> Destul pentru a adăuga o anumită perioadă de timp, mod
Atunci este mai bine (în% m + m) m%
res = (a - b + m) m%;
. funcţionează corect şi rapid (unul modulo în loc de două) Chiar şi mai repede va fi astfel: res = a - b; dacă (res <0) res + = m;