Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Infoarena Monthly 2014, Runda 8  (Citit de 5958 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Teodor94
Echipa infoarena
Nu mai tace
*****

Karma: 63
Deconectat Deconectat

Mesaje: 558



Vezi Profilul
« : August 28, 2014, 21:01:55 »

Runda 8 va avea loc Duminica, 31 august la ora 1900.
Va uram mult succes!  Winner 1st place
Memorat
Teodor94
Echipa infoarena
Nu mai tace
*****

Karma: 63
Deconectat Deconectat

Mesaje: 558



Vezi Profilul
« Răspunde #1 : August 31, 2014, 20:31:32 »

Runda s-a incheiat. Clasamentul este public. Problemele au fost adaugate in arhiva! Asteptam primele voastre impresii Very Happy

Felicitari tuturor participantilor  Winner 1st place
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #2 : August 31, 2014, 20:33:47 »

Leeerooooooy Jeeenkiiiiiins!  Very Happy Cine e fan Blizzard/Warcraft?
Ar fi util sa vezi scorul potential la probleme ca la codeforces.
Memorat
xtreme77
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 69



Vezi Profilul
« Răspunde #3 : August 31, 2014, 20:36:09 »

O runda cu probleme super frumoase ! Big up comisiei !  Very Happy Apropo,imi poate da si mie cineva o indicatie la problema Super Mario ? M am chinuit o ora din concurs sa o dovedesc,dar nu prea a fost cu succes  Cry
Memorat
narcis_vs
Strain
*

Karma: 19
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #4 : August 31, 2014, 20:39:20 »

Cred ca a fost runda cu cele mai interesante probleme. Felicitari !!! Si ,ca de obicei, asteptam modificarea ratingului.
Memorat
Mihai22e
Client obisnuit
**

Karma: 20
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #5 : August 31, 2014, 20:48:47 »

Probabil cea mai reusita runda de anul acesta, felicitari!  Applause Si nu sunt subiectiv, spun asta in conditiile in care mi-a picat a 3-a problema din cauza ca citesc N muchii in loc de N - 1  Whistle O intrebare: cum se poate rezolva prima problema daca B - A <= 10^9, in loc de 10^3?
Memorat
andrei_toader
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #6 : August 31, 2014, 20:51:04 »

Cand o sa apara articolul cu solutii?
Memorat
ctlin04
Nu mai tace
*****

Karma: 23
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #7 : August 31, 2014, 20:55:57 »

Daca erau enunturi mai scurte runda era sa fie si mai frumoasa.  Smile
Memorat
narcis_vs
Strain
*

Karma: 19
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #8 : August 31, 2014, 20:59:52 »

@Mihai22e .Eu as folosi smenul de la problema cntgcd.
Memorat
a_h1926
Echipa infoarena
Nu mai tace
*****

Karma: 317
Deconectat Deconectat

Mesaje: 385



Vezi Profilul
« Răspunde #9 : August 31, 2014, 21:19:54 »

O runda cu probleme super frumoase ! Big up comisiei !  Very Happy Apropo,imi poate da si mie cineva o indicatie la problema Super Mario ? M am chinuit o ora din concurs sa o dovedesc,dar nu prea a fost cu succes  Cry

Sunt doua solutii oficiale. In continuare voi prezenta una dintre acestea.

Vom defini o functie recursiva, Solve(left, right), care returneaza numarul minim de mutari necesare pentru a distruge toate testoasele din intervalul [left, right], folosind numai testoase din acest interval. Raspunsul va fi dat de Solve(1, N), iar cazurile de baza Solve(i, i) sunt triviale (raspunsul e mereu 1).
Intr-o solutie optima, testoasele vor fi distruse in ordine descrescatoare dupa valori. Astfel, vom incerca sa facem prima mutare in Solve(left, right). Fie pos pozitia pe care se afla testoasa de valoare maxima din intervalul [left, right]. Putem sa o lovim spre stanga sau spre dreapta, iar noi vom alege varianta optima. Astfel, Solve(left, right) va returna min(Solve(left, pos - 1), Solve(pos + 1, right)) + 1. Pentru a determina eficient pos, putem folosi o structura de date precum arborii de intervale. Complexitatea este O(N * logN).

Cealalta solutie oficiala se bazeaza pe programare dinamica si are complexitate liniara.
Memorat
xtreme77
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 69



Vezi Profilul
« Răspunde #10 : August 31, 2014, 21:24:08 »

Iti multumesc foarte mult pentru ajutor!Am sa incep sa o implementez Smile
Memorat
Maarcell
Strain


Karma: 6
Deconectat Deconectat

Mesaje: 21



Vezi Profilul
« Răspunde #11 : Septembrie 01, 2014, 12:05:49 »

O runda cu probleme super frumoase ! Big up comisiei !  Very Happy Apropo,imi poate da si mie cineva o indicatie la problema Super Mario ? M am chinuit o ora din concurs sa o dovedesc,dar nu prea a fost cu succes  Cry

Sunt doua solutii oficiale. In continuare voi prezenta una dintre acestea.

Vom defini o functie recursiva, Solve(left, right), care returneaza numarul minim de mutari necesare pentru a distruge toate testoasele din intervalul [left, right], folosind numai testoase din acest interval. Raspunsul va fi dat de Solve(1, N), iar cazurile de baza Solve(i, i) sunt triviale (raspunsul e mereu 1).
Intr-o solutie optima, testoasele vor fi distruse in ordine descrescatoare dupa valori. Astfel, vom incerca sa facem prima mutare in Solve(left, right). Fie pos pozitia pe care se afla testoasa de valoare maxima din intervalul [left, right]. Putem sa o lovim spre stanga sau spre dreapta, iar noi vom alege varianta optima. Astfel, Solve(left, right) va returna min(Solve(left, pos - 1), Solve(pos + 1, right)) + 1. Pentru a determina eficient pos, putem folosi o structura de date precum arborii de intervale. Complexitatea este O(N * logN).

Cealalta solutie oficiala se bazeaza pe programare dinamica si are complexitate liniara.

Mi-a venit si mie fix aceeasi idee cu Divide et Impera, dar cum pot sa demonstrez corectitudinea algoritmului? In special afirmatia ca cel mai optim mod este sa distrugem testoasele in ordine descrescatoare dupa P[ i ].
Intuitiv inteleg de ce e asa, dar cum as proceda daca as vrea sa fac o demonstratie matematica consistenta? Presupun ca aici trebuie folosita reducerea la absurd dar nu imi vine in cap cum sa construiesc argumentul.
Memorat
Andrei1998
De-al casei
***

Karma: 26
Deconectat Deconectat

Mesaje: 112



Vezi Profilul
« Răspunde #12 : Septembrie 01, 2014, 12:47:36 »

Inductie dupa lungimea sirului nostru, N:

Cazul de baza: N=1 => Evident, algoritmul nostru e corect aici.

Cazul general: Presupunem ca am demonstrat afirmatia noastra pentru toti 1 <= k < N si acum vrem sa demonstram afirmatia noastra pentru N. In primul rand, daca nu am folosi maximul din vector, nu am avea cum sa ucidem toate testoasele (cum elementele vectorului sunt unice rezulta ca numai maximul se poate elimina pe el insusi). Apoi, daca nu am folosi maximul chiar la inceput, aratam ca am irosit mutari (deci solutia noastra nu este in general optima). Mai exact, presupunem ca maximul e pe pozitia X. Numim stanga lui X intervalul [1,X-1] si dreapta lui X intervalul [X+1,N] (cazurile cand unul din aceste intervale este vid se trateaza analog). Daca nu am folosi maximul chiar la inceput, am face cateva miscari strict in stanga lui X si cateva strict in dreapta lui X (independente fiindca X este maxim), dupa care am folosi maximul in una din directii. Maximul va elimina cu siguranta tot ce exista in aceea directie, deci mutarile facute acolo au fost inutile, iar cele facute in cealalta directie puteau fara a schimba raspunsul sa fie facute si dupa eliminarea maximului. Astfel, am demonstrat ca la pasul curent vom alege mai intai maximul. Dupa alegerea maximului, vectorul nostru se micsoreaza, si cum stim ca am demonstrat afirmatia pentru 1 <= k < N, rezulta ca in continuare vom alegem numai maxime, indiferent cum am orienta primul maxim ales.

Am incercat sa o fac cat de riguros am putut. Oricum, mare parte a demonstratiei e intuitie.  Thumb up

Edit: Practic am folosit reducerea la absurd, fara insa a folosi formularile clasice.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines