Titlul: 841 Bete2 Scris de: Airinei Adrian din Aprilie 05, 2009, 11:27:50 Aici puteti discuta despre problema Bete2 (http://infoarena.ro/problema/bete2).
Titlul: Răspuns: 841 Bete2 Scris de: A Andrei din Aprilie 05, 2009, 11:45:29 O idee pentru a obtine 100 puncte?! #-o
Titlul: Răspuns: 841 Bete2 Scris de: Marius Stroe din Aprilie 05, 2009, 16:03:24 O idee pentru a obtine 100 puncte?! #-o Căutare binară. Titlul: Răspuns: 841 Bete2 Scris de: Florian Marcu din Aprilie 05, 2009, 16:25:43 Se poate mai rapid de O(N^2 * logN ) ? :-k
Titlul: Răspuns: 841 Bete2 Scris de: A Andrei din Aprilie 05, 2009, 17:00:56 Multumesc! =D>
Titlul: Răspuns: 841 Bete2 Scris de: Marius Stroe din Aprilie 05, 2009, 17:28:32 Se poate mai rapid de O(N^2 * logN ) ? :-k O(N2) cu hashuri. Titlul: Răspuns: 841 Bete2 Scris de: Cezar Mocan din Aprilie 06, 2009, 07:22:00 Se poate O(N^2) si fara hashuri. Sortezi sirul si incerci sa obtii elementul i ca suma a 2 numere dinaintea lui din sirul sortat (asta se poate face cu 2 indici, unul porneste de la 1 spre i si celalalt de la i spre 1).
L.E. Nu's foarte sigur ca e corecta, dar testata cu brutul a mers pe vreo 2000 de teste... Titlul: Răspuns: 841 Bete2 Scris de: A Andrei din Aprilie 06, 2009, 09:47:16 Si nu e O(N^3)? Ai O(N) pentru a lua fiecare numar in parte si O(N^2) pentru a verifica daca se poate forma cu 2 numere dinainte sa.Cu rezolvarea asta obtii 40 puncte. Titlul: Răspuns: 841 Bete2 Scris de: Cezar Mocan din Aprilie 06, 2009, 10:00:20 Nu e O(N^3) pentru ca tu cu fiecare din cei 2 indici pargurgi portiunea 1..i pana se intalnesc (adica maxim i operatii in total).
Titlul: Răspuns: 841 Bete2 Scris de: A Andrei din Aprilie 06, 2009, 11:12:45 Cod: sort(0,n-1); Titlul: Răspuns: 841 Bete2 Scris de: Florian Marcu din Aprilie 06, 2009, 11:19:54 Nu asa. :)
Citat sortare sir; for(i=1;i<=n;++i) { p = 1; k=i; cat timp(p != k) { prelucrare in o(1); ++p; --k; } } Ceva in genul asta. :) Titlul: Răspuns: 841 Bete2 Scris de: Tirca Bogdan din Aprilie 07, 2009, 22:22:17 sal... cum poti sa estimezi care e cea mai "eficienta" dimensiune pt un hash?
DIM timp 984437 552ms 4342 208ms 2333 236ms 371 308ms din cate vad valoarea optima aici e de 3000-5000(banuiesc,ca nu mai bagai si altele)... Cum as putea aproxima asta in functie de datele de intrare(normal ca depinde si de teste,dar asa in mare...)??? :-k Titlul: Răspuns: 841 Bete2 Scris de: Preda Rares Mihai din Aprilie 10, 2009, 22:58:35 Am facut sortare rapida si m-am gandit sa aplic cautarea binara dar obtin doar 40 de puncte deoarece pe celelalte 6 teste obtin raspuns incorect.
Ma ajutati va rog in depistarea greselii mele ? //quicksort Cod: x=0; Editat de admin: Foloseste tagul "code" cand postezi surse. Titlul: Răspuns: 841 Bete2 Scris de: Codrin LACHE din Aprilie 17, 2009, 17:01:49 e ceva mai special la primele 4 teste??
ca iau WA si chiar nu stiu ce gresesc :readthis: Cod: sort(a,a+n); Titlul: Răspuns: 841 Bete2 Scris de: A Cosmina - vechi din Iulie 30, 2009, 19:37:25 Ma poate ajuta cineva cu ( , ) cautarea binara ? :?
Cod: for (i=0;i<N-1;i++) Titlul: Răspuns: 841 Bete2 Scris de: Sima Cotizo din Iulie 30, 2009, 19:42:04 Probabil iti ruleaza la infinit. In primul if din cautare eu as sparge while-ul cu un break... sau oricum, trebuie facuta acolo o operatie care sa iti modifice st sau dr pentru ca din momentul in care conditia este indeplinita, st si dr nu se mai modifica (deci nu se mai iese din while).
Titlul: Răspuns: 841 Bete2 Scris de: Mihai Calancea din Iulie 30, 2009, 22:01:29 Cod:
else dr = mij - 1; :) Mai bine fa-o functie : Cod:
Break-urile si chestii dinastea nu-s chiar semnele programarii ingrijite :D Am un coleg care face ceva gen while ( 1 ) { if ( nu stiu ce ) break; } Nu recomand :roll: Cel putin cand ai alternativa . Titlul: Răspuns: 841 Bete2 Scris de: George Popoiu din Ianuarie 04, 2010, 23:26:49 @miculprogramator
De ce descrescator? Vad ca pornesti i de la 0, daca porneai de la N-1 sortai descrescator. Daca sortezi descrescator pentru v[ i ]+v[j] nu o sa gasesti nici un numar in intervalul (i,j) cara sa fie egal cu suma elementelor din capat. Incearca sa sortezi crescator, si pt i si j sa cauti in intervalul (j,N]. P.S : Este o mica greseala in enunt Citat Acum si-a propus ss formeze grupuri distincte Titlul: Răspuns: 841 Bete2 Scris de: Vlad Tarniceru din Iunie 01, 2010, 20:20:23 am rezolvat problema de 100 de puncte folosind sortarea+cautarea binara, dar se poate lua un vector v[1.000.000.000]?
adica de tip short, ca nu stiu cum sa verific daca incape in memorie ... Titlul: Răspuns: 841 Bete2 Scris de: Paul-Dan Baltescu din Iunie 01, 2010, 20:32:19 Socoteala memoriei se face asa:
(unsigned) char - 1 byte (unsigned) short - 2 bytes (unsigned) int/long/float - 4 bytes (unsigned) long long/double - 8 bytes Socotesti pentru fiecare variabila declarata cat ocupa, insumezi valorile si convertesti rezultatul la kb sau Mb, in functie de unitatea in care este exprimata limita de memorie. In cazul tau un vector de lungime 10^9 de short inseamna 2*10^9 bytes = (aprox.) 2*10^6 kb = (aprox.) 2*10^3 Mb. Tu ai la dispozitie 16384 kb < 2*10^6 kb => nu poti declara atata memorie. In general, in probleme de olimpiada, nu poti aloca memorie de ordinul miliardelor sau al sutelor de milioane. Titlul: Răspuns: 841 Bete2 Scris de: Johnny Depp din Mai 27, 2013, 13:53:20 Eu am rezolvat problema fara hasuri si fara cautare binara si se pare ca e mai rapid asa decat cu hashuri. Am facut pur si simplu 2 for-uri si verificam daca v[ i ]+v[ j ]<=1000000000( 1<=i<=n si i+1<=j<=n) si daca mai e un element cu acea valoare ( in vectorul v am sirul initial si am mai tinut un bitset in care lg[ x ]=1 daca in sirul initial am un element egal cu x ( 1<=x<= 1000 000 000 ) ).
Titlul: Răspuns: 841 Bete2 Scris de: Bejenariu Ionut Daniel din Ianuarie 19, 2014, 16:12:27 imi puteti da un exemplu ca nu imi dau seama unde gresesc :)
Titlul: Răspuns: 841 Bete2 Scris de: Mihai Ionut Enache din Ianuarie 19, 2014, 16:29:46 Pe testul
Cod: 3 Titlul: Răspuns: 841 Bete2 Scris de: Bejenariu Ionut Daniel din Februarie 08, 2014, 12:38:36 vreo idee de optimizare (cod sursa #1101355)
Titlul: Răspuns: 841 Bete2 Scris de: Rodion Raskolnikov din Martie 24, 2016, 15:53:21 #include<iostream>
#include<fstream> #include<algorithm> using namespace std; int v[3000]; int main() { ifstream in("bete2.in"); ofstream out("bete2.out"); int n,s,start=1,endd,m=0; in>>n; for(int i=1; i<=n; i++) { in>>v; } int ct=0; sort(v+1,v+n+1); for(int j=1; j<=n; j++) { for(int k=j+1; k<=n; k++) { s=v[j]+v[k]; start=1; endd=n; while(start<=endd) { int mij=(start+endd)/2; if(v[mij]==s) { ct++; break; } else if(v[mij]<s) { start=mij+1; } else endd=mij-1; } } } out<<ct<<"\n"; } :) Titlul: Răspuns: 841 Bete2 Scris de: Bejenariu Ionut Daniel din Martie 26, 2016, 21:30:41 Multumesc!
\:D/ |