Blog Sammarize

Autor Sammarize , 4 luni în urmă , În limba rusă

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. " 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 Ab  =  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. . 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.
 
 
 
 

 
4 luni în urmă , #
Editare 2   Vot: îmi place 2 Vot: Nu-mi place

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.

 
4 luni în urmă , #
Editare 3   Vot: îmi place patru Vot: Nu-mi place

În problema D Herald este în partea de sus de la 0, nu este nevoie de a renumerota: o)

Singurul comentariu - problema pentru o limită de divizia a doua la 40 ar fi mai oportun să treci decizii cu privire la python, rubin şi altele. Se pare mai mult decât rezonabil - sarcini A şi B nu sunt rezolvate în toate limbile.

  •  
    4 luni în urmă , # ^
      Vot: îmi place 0 Vot: Nu-mi place
    Ne pare rău, nu ştiam că de 100 ^ 3 - o afacere pentru unii O_O limba această problemă, în general, a fost statistic a doua dificultate - nu din cauza asta?
    •  
      4 luni în urmă , # ^
        Vot: îmi place 4 Vot: Nu-mi place
      Da, în Ruby, şi 10 în al cincilea nu includ întotdeauna: o)
      10 ^ 6 din Python pare că a trecut, pentru că există mai multe soluţii pentru a doreshke, dar am prieteni care nu sunt împinse la un concurs în Python: o)
      Şi, după cum scrie a doua divizie, inclusiv, şi de oameni departe de sport de programare care urmează să fie făcut pentru a A şi B în div2 întotdeauna a renunţat la limbaje de scripting. Cu atît mai mult în formatul locale nu am dat seama chiar că traficul de fiinţe umane - pentru că pretesty mici.

 
4 luni în urmă , #
  Vot: îmi place 2 Vot: Nu-mi place
Poate că nu, dar subiect: D: Cum este de memorie de volum de pe yakykah MS C + + şi  ? GNU C + + am doar pe MS acelaşi cod C + + AC cu ML = ~ 20 MB ... şi C GNU ++--- pur ML ( Sau ce altceva ar putea fi problema?



  •  
    4 luni în urmă , # ^
      Vot: îmi place 8 Vot: Nu-mi place
    La STL studio este pusă în aplicare în mod diferit. De exemplu, în vectorul CCG de fiecare dată când extinderea la de două ori limita este atinsă, iar în studio - ca ceva nu este clar, dar mai puţin de jumătate. Acest lucru şi mai puţin consum de memorie.
 
4 luni în urmă , #
  Vot: îmi place 0 Vot: Nu-mi place
Cine poate explica Autobuze, în găsirea unui răspuns, am vazut ca opţiune. (A adaptirvoal pic)

a [i] = (. s [t] - s [f] + (v [i] două == 0) + mod) mod%; / / întrebarea de ce există + mod
s [i + 1] = (s [i] + a [i]) mod%;

Elemente de toate containerele, int, mod = 10 9 7, care este, 2 * Mod este plasat în int.
Toate s [i] a considerat modulo mod. Ei nu vor mai fi mod. s [i] sunt pozitive, şi s [t]> s [f].

Întrebarea, care este diferenţa dintre
a [i] = (s [t] - s [f] + (v [i] două == 0) + mod.) Mod%;
şi
(. s [t] - s [f] + (v [i] două == 0)) a [i] =% mod;
  •  
    4 luni în urmă , # ^
      Vot: îmi place 2 Vot: Nu-mi place
    Apoi, faptul că numerele negative în mai multe limbaje de programare sunt luate nu modulo cu privire la definirea matematic: (-5)% 3 == 2. Prin urmare, pentru a ţine în mod corespunzător cu privire la modul, este suficient să adăugaţi o anumită sumă de mod de timp, până când numărul devine non-negativ.
    În acest caz, (aparent) s [t] - s [f]> =- mod, prin urmare, suficient pentru a adăuga mod o singură dată.
    •  
      4 luni în urmă , # ^
        Vot: îmi place 2 Vot: Nu-mi place

      >> Destul pentru a adăuga o anumită perioadă de timp, mod

      Atunci este mai bine (în% m + m) m%

      •  
        4 luni în urmă , # ^
          Vot: îmi place 4 Vot: Nu-mi place
        Aceasta este a doua etapă de cunoaştere a Zen.
      •  
        4 luni în urmă , # ^
          Vot: îmi place 0 Vot: Nu-mi place
        În cazul în care garantat 0 ≤  o ,  b  <  m , atunci  -  m  <  una  -  b  <  m , şi apoi
        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;




  •  
    4 luni în urmă , # ^
      Vot: îmi place 2 Vot: Nu-mi place
    Nu este adevărat că s [t]> s [f], deoarece că nu avem numere, precum şi resturile de mod => s [t] - s [F] + (. V [I] a doua == 0) poate fi negativă.
    •  
      4 luni în urmă , # ^
        Vot: îmi place 2 Vot: Nu-mi place
      Acesta este acelasi:))) Multumesc. Ore rupe capul, şi un fleac ratat :((((
  •  
    4 luni în urmă , # ^
      Vot: îmi place 4 Vot: Nu-mi place
    Faptul că nu este adevărat, că e [t]> s [f]. Acestea sunt în valoare absolută.
 
4 luni în urmă , #
  Vot: îmi place -1 Vot: Nu-mi place
Întrebări nice:)
 
4 luni în urmă , #
Editare 3   Vot: îmi place -1 Vot: Nu-mi place

În materie de sarcina: poate fi considerat ca o dinamica a răspuns "la sfârşitul": pentru fiecare oprire să ia în considerare cât de multe moduri de a obtine de la ea până la capăt? Treceri: acord organizate în ordine inversă pe terminus de autobuz. Luaţi autobuzul - el are Ti final, Si iniţială. Atunci, pentru oprirea de către Si Ti (nu inclusiv Ti), în segmente de linie copac cu o modificare pentru a adăuga numărul segmentul de moduri de a obţine de la Ti la ultima oprire. (Toate răspunsurile sunt stocate la segmentele de linie copac)
În cazul în care ar putea exista o problemă în această decizie? 51 AW

Dacă cineva vrea să ajute - faceti o  587 332
 
3 luni în urmă , #
  Vot: îmi place 0 Vot: Nu-mi place
Am abordare oarecum diferită la ultima problemă. De fapt, se poate spune ca am implementat soluţia cea mai drept înainte. 

În cazul în care nu au fost de reconstrucţie a drumul pe care este uşor de a scrie soluţie dinamică a problemei. Am itera toate valorile lui n 1 ... n şi se calculează în cele mai bune putem obţine câştig pentru fiecare valoare posibilă a m. Valorile pentru unii n 1 depinde numai de valori ale lui n 1 şi, prin urmare vom consuma doar O (n) de memorie şi a fost nevoie de O (n * m) calculele pentru această parte a problemei.

Lucru este că memoria nu este suficienta pentru a stoca toate acţiunile pe care le au pentru a ajunge la acest rezultat. Acesta este motivul pentru acest lucru atunci când fac calcule să păstrez acţiunile întreprinse numai pentru trimestrul superioare ale tuturor ns. Atunci eu pot resotre ultimul trimestru al anului şir căutat. Dar când l-am restaura pot formula, de asemenea, probleme mai mici care urmează să fie rezolvate (cu valori mai mici ale lui n şi m). În ea am face acelaşi lucru şi să analizeze din nou, acţiunile întreprinse numai pentru ultima parte a ns corespunzătoare sfert din versiunea originală n. Când am repeta de patru ori am tot răspunsul întreg. 

Această soluţie se potriveşte atât în ​​memorie şi de timp.
  •  
    3 luni în urmă , # ^
      Vot: îmi place -1 Vot: Nu-mi place
    Asimptotic soluţia este să ia în sus timp O (nm), dar de fapt, cred, că va lucra prea lent, pentru că sunteţi dinamic repeta de patru ori ...
    •  
      3 luni în urmă , # ^
        Vot: îmi place 0 Vot: Nu-mi place
      Lucru este că, cu această restirctions timp vă puteţi permite recalcularea de mai multe ori. Limitele de memorie impune ca, dar cât mai curând dinamic se poate face in O (n * m) nu este o problemă. 

      Cea mai mare încetini este că încă mai trebuie pentru a optimiza memorie destul de multe si de aceea am magazin de fiecare acţiune iau în numai singur bit. Aceasta adaugă pe unele acţiuni mai mult trebuie să luaţi pentru fiecare citire şi de fiecare operatie de scriere. 

      Şi ceva am uitat sa mentionez: ca de fiecare dată cu alte în care am posta soluţia mea, am trecut în problema codeforces, în prealabil.


Original Text: