infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Mircea Pasoi din Martie 18, 2006, 12:50:02



Titlul: 197 Semne
Scris de: Mircea Pasoi din Martie 18, 2006, 12:50:02
Aici puteţi discuta despre problema Semne (http://infoarena.ro/problema/semne).


Titlul: 197 Semne
Scris de: Andrei Grigorean din Martie 18, 2006, 13:02:19
S nu are limita?


Titlul: 197 Semne
Scris de: Filip Cristian Buruiana din Martie 18, 2006, 13:30:04
Suma tuturor numerelor a


Titlul: 197 Semne
Scris de: Paul-Dan Baltescu din Martie 21, 2006, 17:29:02
Deci S poate fi si negativ, nu?


Titlul: 197 Semne
Scris de: Filip Cristian Buruiana din Martie 21, 2006, 19:09:39
DA


Titlul: Raspuns: 197 Semne
Scris de: Tofan Vasile din Decembrie 13, 2006, 23:59:47
am obtinut 50 p dar n-am nici o idee pentru 100 p.  #-o hint...?  :?


Titlul: Raspuns: 197 Semne
Scris de: Paul-Dan Baltescu din Decembrie 14, 2006, 08:09:15
Random :)


Titlul: Raspuns: 197 Semne
Scris de: Tofan Vasile din Decembrie 14, 2006, 14:52:39
ai putea oferi mai multe detalii?  :-k


Titlul: Raspuns: 197 Semne
Scris de: Bunau Florin din Decembrie 14, 2006, 16:56:41
:))  \:D/ This is so much fun... am scris un algoritm aproape random :))=)) am reusit sa iau maxim 20 pcte...  You were joking asai? :)) oricum.. mai trimit inca de cel putin 10 ori...too much fun, e ca si cum ai primi cadouri de craciun, nu sti ce iti poate aduce urmatoru submit.

[later edit] OMG chiar nu glumeai, m-am mai jucat cu sursa, si am luat 80pcte :o incredible :P


Titlul: Raspuns: 197 Semne
Scris de: Andrei Grigorean din Decembrie 14, 2006, 19:45:20
Faci un random destept. Asta e si solutia oficiala :).


Titlul: Raspuns: 197 Semne
Scris de: Bunau Florin din Decembrie 14, 2006, 20:49:41
Done  =D> Thx for tips ppl. Altfel ramaneam la 75


Titlul: Raspuns: 197 Semne
Scris de: Cezar Mocan din Decembrie 19, 2006, 21:21:35
Imi ziceti si mie plz cam ce inseamna "random destept"?? Ca nu prea am mai rezolvat probleme de genu asta. :?


Titlul: Raspuns: 197 Semne
Scris de: Filip Cristian Buruiana din Decembrie 20, 2006, 17:02:03
O rezolvare corecta intotdeauna din punct de vedere matematic are complexitatea mult prea mare. Pentru ca programul tau sa se incadreze in timp incearca un algoritm randomizat ( care sa se bazeze pe calcule aleatoare ). De exemplu ai putea genera aleator numere pana gasesti solutia. Bineinteles nici aceasta nu e o solutie prea desteapta. Poti incerca alti algoritmi, tot bazati la un anumit punct pe generarea unor numere aleatoare.


Titlul: Raspuns: 197 Semne
Scris de: Marius Stroe din Decembrie 20, 2006, 21:37:37
Cate sanse ai sa iei de doua ori consecutiv 100 p cu un astfel de algoritm ? :)


Titlul: Raspuns: 197 Semne
Scris de: Cezar Mocan din Decembrie 20, 2006, 21:40:15
Ok, mersi.
Marius Stroe: Pai daca faci un random cu adevarat destept iei 100 mereu.  :thumbup:


Titlul: Răspuns: 197 Semne
Scris de: Tudor A din Martie 17, 2007, 16:03:32
daca iti pastrezi seed-ul de random , ai sanse.


Titlul: Răspuns: 197 Semne
Scris de: Stefan Istrate din Aprilie 22, 2007, 11:02:34
Problema se poate rezolva si fara random cu ajutorul unui hash :P Ca sa vedeti ca exista si anti-ciucuieli. (Anti-ciucuiala = abordare corecta din punct de vedere matematic a unei probleme si care ia punctaj maxim, in ciuda faptului ca problema a fost propusa doar pentru ciucuieli)


Titlul: Răspuns: 197 Semne
Scris de: Teodorescu Andrei-Marius din Aprilie 22, 2007, 15:52:33
Ai demonstrat tu ca ai destula memorie pentru solutia ta indiferent de test? Sau te-ai bazat pe faptul ca testele sunt generate aleator si pentru anumite grupe de numere ai o gramada de submultimi cu aceeasi suma? Caz in care tot ciucuiala se cam numeste programul...


Titlul: Răspuns: 197 Semne
Scris de: Andrei Homorodean din Aprilie 22, 2007, 18:39:08
E ceva recursiv in toata chestia cu random? Nu puteti da mai multe detalii, va rog..


Titlul: Răspuns: 197 Semne
Scris de: Cezar Mocan din Aprilie 22, 2007, 18:55:31
Nu, nu e nimic recursiv. Doar muti numere dintr-o multime in alta ca nebunu :)


Titlul: Răspuns: 197 Semne
Scris de: Stefan Istrate din Aprilie 22, 2007, 19:29:20
Ai demonstrat tu ca ai destula memorie pentru solutia ta indiferent de test? Sau te-ai bazat pe faptul ca testele sunt generate aleator si pentru anumite grupe de numere ai o gramada de submultimi cu aceeasi suma? Caz in care tot ciucuiala se cam numeste programul...
Intr-adevar, calcul de memorie nu mi-am facut. Si cred ca e destul de greu. Dar m-am bazat pe niste observatii probabilistice. Nu este o intamplare ca exista foarte multe submultimi cu aceeasi suma. Acest lucru nu e din cauza generarii aleatoare a testelor.
Sa consideram toate posibilitatile de a lua 2 numere din cele N pentru a le fixa cate un semn. Numarul de posibilitati pentru a face acest lucru este 2*N*(N-1), deoarece putem lua 2 elemente X si Y in N*(N-1)/2 moduri, avand pentru fiecare mod unul din urmatoarele cazuri:
1. +X +Y
2. +X -Y
3. -X +Y
4. -X -Y
Intrucat fiecare element X satisface conditia 1<=X<=5.000.000, suma algebrica a 2 astfel de elemente va satisface conditia -10.000.000<=S<=10.000.000. Deci, cele 2*N*(N-1) sume se vor "inghesui" pe 20.000.000 de pozitii. In cazul unui test maxim (N=50.000), surplusul (numarul de sume algebrice care se repeta) este de cel putin 4.979.900.000. Asadar, doar considerand sumele formate din 2 numere, numarul de repetii este foarte mare.
Desigur, e posibil sa existe teste extreme si pe care solutia mea sa le pice din cauza memoriei. Ce am vrut eu sa subliniez este ca rezolvarea mea este corecta matematic, nefolosind random. Intr-adevar, exista si rezolvari corecte care folosesc generari de numere aleatoare (de exemplu quicksort cu pivot aleator), numai ca din discutia de mai sus am inteles ca "randomul destept" nu este una din acestea. :peacefingers:


Titlul: Răspuns: 197 Semne
Scris de: Andrei Homorodean din Aprilie 22, 2007, 20:37:21
Iau 70 din cauza faptului ca folosesc rand() % n sau nu am algoritm bun? Exista ceva mai rapid decat rand() % n? random(n) am tot incercat si nu reusesc sa-l fac sa mearga.. Am rulat exemplul din help si da eroare..


Titlul: Răspuns: 197 Semne
Scris de: Bondane Cosmin din Aprilie 22, 2007, 20:53:16
Poate cineva sa explice mai pe larg o idee de implementare folosind un random 'destept' ?  #-o


Titlul: Răspuns: 197 Semne
Scris de: Ionescu Vlad din Aprilie 22, 2007, 21:00:36
^ subscriu.. nu ma prind nicicum.. dati macar pe privat o idee putin mai detaliata, va rog...


Titlul: Răspuns: 197 Semne
Scris de: Andrei Homorodean din Aprilie 22, 2007, 21:58:59
Cred ca e bun algoritmul meu, rand() % n mi se pare a fi incet, iau 90 totusi... Lucrezi cu un vector caractertistic: nr[ i ] = 1, daca i apartine multimii cu +, sau 0, in caz contrar... Mai tii si o suma care reprezinta configuratia curenta.. si tu tot generezi cate un numar random si il treci in alta multime pe cel generat daca e optim... Am facut si fara conditie, pur si simplu il schimbam pe cel generat.. si luam 70...


Titlul: Răspuns: 197 Semne
Scris de: Paul-Dan Baltescu din Aprilie 22, 2007, 22:17:05
Poate ar trebui sa faci asa incat sa fii sigur ca de fiecare data alegi un numar cu semnul pe care ti-l doresti.


Titlul: Răspuns: 197 Semne
Scris de: Andrei Homorodean din Aprilie 22, 2007, 22:44:42
Intre timp nu exista ceva mai rapid decat rand() % n, simt ca sunt aproape :P


Titlul: Răspuns: 197 Semne
Scris de: Florian Marcu din Iulie 01, 2007, 19:38:05
tot generezi cate un numar random si il treci in alta multime pe cel generat daca e optim...

Ai putea sa-mi explici putin ce intelegi prin "daca e optim"? Eu iau 65 de puncte cu o solutie care doar genereaza si skimba semnul...


Titlul: Răspuns: 197 Semne
Scris de: Ionescu Robert Marius din Decembrie 01, 2007, 18:10:58
Imi explica cineva cum  fac random ca nu am mai facut niciodata si nu shtiu cum se face  :'(

ms, acuma am inteles si eu


Titlul: Răspuns: 197 Semne
Scris de: Florian Marcu din Decembrie 01, 2007, 19:03:56
Pai random inseamna sa alegi semnul pt un anumit numar, in mod aleatoriu. Schimbi semne, pana cand dai de raspunsul corect. Daca l`ai gasit, atunci te opresti si afisezi rezultatul. Poti folosi functia rand()%n . Succes!  :)


Titlul: Răspuns: 197 Semne
Scris de: Ionescu Vlad din Decembrie 01, 2007, 21:18:28
Un pic mai pe larg:

Pentru a genera numere aleatorii, folosesti functia rand() din headerul <cstdlib>

Pentru a genera numere random diferite la fiecare executie a programului, poti sa incluzi headerul <ctime> si inainte de a apela functia rand(), sa apelezi srand(time(0)) (o singura data in tot programul).

Pentru a genera numere random intr-un anumit interval [0, n), folosesti rand() % n.

Succes!


Titlul: Răspuns: 197 Semne
Scris de: A Cosmina - vechi din Iulie 23, 2009, 12:28:24
Iau 5 puncte (http://infoarena.ro/job_detail/333642?action=view-source) pe ea pentru ca imi da numai primul test... A little hint please?

P.S : Enuntul e criminal. Imi place mult problema. :peacefingers:


Titlul: Răspuns: 197 Semne
Scris de: Vass Peter din Septembrie 10, 2012, 13:05:42
Un mic hint: se poate reduce problema la un fel de "Subset sum problem(http://en.wikipedia.org/wiki/Subset_sum_problem (http://en.wikipedia.org/wiki/Subset_sum_problem))".


Titlul: Răspuns: 197 Semne
Scris de: Alex Velea din Mai 10, 2014, 15:54:48
Are cineva o sursa care intra in timp pe testul

Cod:
54 0
11 11 11 11 11 11 11 11 11 11 11 11 11
13 13 13 13 13 13 13 13 13 13 13
1700 1700 1700 1700 1700 1700 1700 1700 1700 1700 1700 1700 1700
1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300 1300


Titlul: Răspuns: 197 Semne
Scris de: Alexandru Valeanu din Mai 10, 2014, 16:17:31
Nu este sursa mea dar intra in timp pe acest test: http://www.infoarena.ro/job_detail/53475?action=view-source