infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din Martie 25, 2007, 13:26:57



Titlul: 386 Dezastru
Scris de: Adrian Diaconu din Martie 25, 2007, 13:26:57
Aici puteţi discuta despre problema Dezastru (http://infoarena.ro/problema/dezastru).


Titlul: Răspuns: 386 Dezastru
Scris de: Radu Zernoveanu din Martie 26, 2007, 15:36:59
ce optimizari as putea face daca am facut un back in care am luat toate combinarile de k numere astfel incat ele sa fie luate crescator(un grup sa fie luat o singura data) ? ca iau 70 de puncte si 3 TLE


Titlul: Răspuns: 386 Dezastru
Scris de: ctes tesc din Martie 26, 2007, 17:52:55
probabil fara back....  :P


Titlul: Răspuns: 386 Dezastru
Scris de: Cezar Mocan din Martie 26, 2007, 18:26:44
Nu, si solutia oficiala e cu back...


Titlul: Răspuns: 386 Dezastru
Scris de: HighScore din Martie 26, 2007, 18:40:28
poi si atunci cum...k io cu back iau 4 tle..si nu folosesc in functia de back mai deloc memorie...
LE: la sol oficiala nu precizeaza nimic de back, si nici nu spune ca ar obtine 100 cu combinari....


Titlul: Răspuns: 386 Dezastru
Scris de: Bogdan-Cristian Tataroiu din Martie 26, 2007, 18:52:37
Se ia 100 cu Combinari de N luate cate K.. nu folosi long double cum am facut eu in concurs :).
Vezi ca daca esti la pasul k in stiva poti limita superior valoarea care poti s-o pui ( cand faci combinari tii valorile ordonate crescator in stiva ).


Titlul: Răspuns: 386 Dezastru
Scris de: Cezar Mocan din Martie 26, 2007, 18:58:04
Exact asta fac si eu...combinari de n luate cate k, in stiva pe pozitia i pun de la st[i-1]+1 pana la n si iau doar 60 cu TLE.
Trebuie facut back-ul iterativ?? :-'


Titlul: Răspuns: 386 Dezastru
Scris de: HighScore din Martie 26, 2007, 19:07:23
da ce rost are sa tii minte elementele combinarii? ???


Titlul: Răspuns: 386 Dezastru
Scris de: Mircea Pasoi din Martie 26, 2007, 19:17:11
Daca nu va intra in timp, puteti incerca oricand o solutie cu programare dinamica  :ok:


Titlul: Răspuns: 386 Dezastru
Scris de: Cezar Mocan din Martie 26, 2007, 19:18:39
Mda...  :-k. Totusi, am inceput cu back si vreau sa o duc la bun sfarsit asa... nu ma dau eu batut... :mrgreen:


Titlul: Răspuns: 386 Dezastru
Scris de: Pandia Gheorghe din Martie 26, 2007, 19:23:41
Referitor la metoda back... se pot face niste optimizari pentru a vedea pe fiecare nivel intre ce valori poti considera elementul din permutare. De asemenea poti face vectorul lista simplu inlantuita iar restul variabilelor alocate dinamic. Preluandu-ti ideea am facut asa si zic eu ca mai rapid e imposibil...

Cu o astfel de solutie obtii maxim 70p, deci cred ca intr-adevar trebuie programare dinamica!


Titlul: Răspuns: 386 Dezastru
Scris de: Florian Marcu din Iunie 26, 2007, 20:49:20
Cod:
 Problema se poate rezolva si folosind prgramarea dinamica. 
Se construieste matricea Ai,j cu semnificatia suma tuturor produselor de j
 factori alesi din primele i numere. Recurenta se poate calcula usor Ai,j=Ai-1,j+Ai-1,j-1*Pi.
Probabilitatea ceruta va fi An,k impartita la Cn,k (combinari de n luate cate k).

Care ar trebui sa fie initializarea matricei A? Am initializat A[0,0] cu 1 si nu iese...

[ Gata! S-a rezolvat... ]


Titlul: Răspuns: 386 Dezastru
Scris de: Taloi Bogdan Cristian din Iulie 18, 2007, 11:48:30
O mica problema -> cand nu inchid fisierul de intrare imi da 2 de non-zero exit status, cand inchid fisierul de intrare imi da 7 de non-zero exit status
:eyebrow:  :'( Care-i treaba?

[editat de moderator: cred ca in forma asta mesajul este mai lizibil]


Titlul: Răspuns: 386 Dezastru
Scris de: Savin Tiberiu din Iulie 18, 2007, 13:50:12
vezi ca nu prea cred ca ai scris corect acolo. Incearca sa postezi din nou, de data asta mai clar ce se intampla.


Titlul: Răspuns: 386 Dezastru
Scris de: Taloi Bogdan Cristian din Iulie 19, 2007, 13:15:48
       Lucrez in Pascal;
       Am facut programul dar am uitat sa dau close(f)->f=fisierul de intrare; l-am trimis si am primit 2*raspuns corect , 3*raspuns gresit , 2*non-zero exit status si 3*time limit exceeded
       Mi-am dat seama de greseala si am inchis fisierul, apoi am trimis problema si am primit 7*non-zero exit status si 3*time limit exceeded. :?: :?: :-s


Titlul: Răspuns: 386 Dezastru
Scris de: Florian Marcu din Iulie 19, 2007, 13:37:18
Deci...poate folosesti memorie nedeclarata [vectori declarati prea mici], sau poate ai gresit numele fisierelor!  ???


Titlul: Răspuns: 386 Dezastru
Scris de: Taloi Bogdan Cristian din Iulie 19, 2007, 15:06:40
 :bomb: NUP!!


Titlul: Răspuns: 386 Dezastru
Scris de: Ivan Nicolae din Iulie 19, 2007, 21:24:41
  Folosesti vre-un halt() prin program?   (sau nush cum era exit() in Pascal)


Titlul: Răspuns: 386 Dezastru
Scris de: Andrei Grigorean din Iulie 19, 2007, 22:07:24
Daca ne spui ca iei non-zero exit status nu inseamna prea mult, si ne este greu sa ne dam seama care ar putea fi problema (eventual o ghicim). Incearca sa explici pe scurt ce faci.


Titlul: Răspuns: 386 Dezastru
Scris de: Adrian Diaconu din Iulie 19, 2007, 23:58:27
Vezi ca non-zero exit status primesti si daca imparti la 0.


Titlul: Răspuns: 386 Dezastru
Scris de: Taloi Bogdan Cristian din Iulie 20, 2007, 13:00:29
Nu folosesc exit,halt,break,etc.,etc. :puke:

Fac combinari de n luate cate k.Pentru fiecare combinare inmultesc rezultatele si le adun cum zice in problema.Formula nu are nimic. :baby:

Nu impart nimic la 0. Variabila cu care impart e minim 1 :surrender:


Titlul: Răspuns: 386 Dezastru
Scris de: Adrian Diaconu din Iulie 20, 2007, 13:15:00
Vezi sa nu iti dea un overflow pe la calculul combinarilor, in urma caruia sa ajungi sa imparti la 0.  :D


Titlul: Răspuns: 386 Dezastru
Scris de: Airinei Adrian din Iulie 20, 2007, 15:43:54
De ce nu postezi undeva codul sursa, poate asa cineva isi da seama ce gresesti  :shock:


Titlul: Răspuns: 386 Dezastru
Scris de: Taloi Bogdan Cristian din Iulie 21, 2007, 10:53:57
Uite programul. :indifferent:
Eu stiam ca nu e voie sa se posteze sursele. [-X
Cod:
Program dezastru;
Var f:text;
    i,k,n,p,nn,nk,kk:longint;
    s,pp:real;
    c:array[1..8000] of byte;
    a:array[1..8000] of real;
Begin
  assign(f,'dezastru.in');
  reset(f);
  readln(f,n,k);
  nn:=1;
  for i:=1 to n do begin nn:=nn*i; read(f,a[i]); end;
  nk:=1;
  for i:=1 to n-k do nk:=nk*i;
  s:=0.0;
  pp:=1.0;
  kk:=1;
  for i:=1 to k do begin kk:=kk*i; c[i]:=i; pp:=pp*a[c[i]]; end;
  s:=s+(pp/(nn div nk))*kk;
  if k<>n then
  repeat
   c[k]:=c[k]+1;
   if c[k]=n+1 then
     begin
      p:=k-1;
      while (p>0) and (c[p]=n-k+p) do p:=p-1;
      c[p]:=c[p]+1;
      for i:=p+1 to k do c[i]:=c[i-1]+1;
     end;
    pp:=1.0;
    for i:=1 to k do pp:=pp*a[c[i]];
    s:=s+(pp/(nn div nk))*kk;
  until(c[1]=n-k+1);
  close(f);
  assign(f,'dezastru.out');
  rewrite(f);
  Writeln(f,s:0:6);
  close(f);
End.


Titlul: Răspuns: 386 Dezastru
Scris de: Paul-Dan Baltescu din Iulie 21, 2007, 11:10:42
Incearca sa folosesti extended in loc de real.
25! nu prea intra in longint.

Eu stiam ca nu e voie sa se posteze sursele. [-X

Nu prea e voie, dar nu ajungeam niciunde. :) Si oricum sursa ta nu prea merge. :P

Si te rog nu mai folosi toate smileyurile pe care le ai la dispozitie pentru ca devii enervant.


Titlul: Răspuns: 386 Dezastru
Scris de: Andrei Grigorean din Iulie 21, 2007, 11:13:38
25! nu intra in niciun tip de date. Ar trebui sa regandesti putin problema.

Tu ai inteles problema, sau doar ai citit solutia si ai vrut sa o implementezi, poate merge?


Titlul: Răspuns: 386 Dezastru
Scris de: Gabriel Bitis din August 28, 2007, 00:18:31
Am incercat varianta cu dinamica...
pt exemplul problemei,
Cod:
3 2
0.3 0.5 0.8
algoritmul meu se comporta asa:
calculeaza Cn,k(combinari de n luate cate k)=3;
initializeaza A[1][1]=0.3
=>
0.3     0 
0.3 0.15 
0.3 0.39 
A[n][k]=0.39
A[n][k]/Cn,k=0.39/3=0.13...

imi spune cineva unde e gresala?


Titlul: Răspuns: 386 Dezastru
Scris de: Adrian Diaconu din August 28, 2007, 18:15:45
Nu prea inteleg ce calculezi tu pe-acolo. Astea ar trebui sa fie valorile.

Cod:
A[0][0]=1;
A[1][1]=0.3; A[1][0]=1;
A[2][2]=0.15; A[2][1]=0.8; A[2][0]=1;
A[3][3]=0.12; A[3][2]=0.79; A[3][1]=1.6; A[3][0]=1


Titlul: Răspuns: 386 Dezastru
Scris de: Gabriel Bitis din August 29, 2007, 00:12:56
Stii ce calculam?  exact aceleasi chestii ce le calculai tu.. doar ca prima coloana nu imi era initializata cu 1...
merci mult pt ajutor :)


Titlul: Răspuns: 386 Dezastru
Scris de: Ionescu Robert Marius din Februarie 09, 2008, 10:34:26
Ai eu o intrebare :D.Cum pot afisa un numar cu un anumit numar de zecimale> :thumbup:


Titlul: Răspuns: 386 Dezastru
Scris de: Bondane Cosmin din Februarie 09, 2008, 10:49:28
Cod:
 printf("%.3lf", c); 

Iti afiseaza numarul in functie de cate zecimale ii spui tu, in cazul asta 3.


Titlul: Răspuns: 386 Dezastru
Scris de: Titei Paul Adrian din Noiembrie 26, 2009, 22:38:19
Se pot obtine 100 de puncte cu backtracking recursiv? Da sau nu... ? Eu am luat 60 si nu stiu ce as putea imbunatatii.


Titlul: Răspuns: 386 Dezastru
Scris de: Mircea Dima din Noiembrie 26, 2009, 22:52:17
Nu cred ca poti obtine 100 pcte cu backtracking (poate doar daca sunt testele proaste)


Titlul: Răspuns: 386 Dezastru
Scris de: Paul-Dan Baltescu din Noiembrie 26, 2009, 23:17:50
Se poate, dar folosind optimizari serioase de cod. Cu solutia cu programare dinamica iei 100 fara sa-ti bati capul.


Titlul: Răspuns: 386 Dezastru
Scris de: Tatar Cornel din Februarie 21, 2011, 15:54:31
gg de probleme  ](*,)


Titlul: Răspuns: 386 Dezastru
Scris de: Gall Mihnea din Decembrie 07, 2012, 08:39:57
Salut !

Am trimis o sursa care lua 100 si acum ia 80.
Se mai poate lua 100 cu backtracking ?

Multumesc