Afişează mesaje
|
Pagini: 1 [2] 3 4 ... 7
|
26
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 603 Pairs
|
: Ianuarie 04, 2008, 23:01:35
|
De ce pana la 10^6? Eu mi-am generat pana la sqrt(10^6)... Cred ca pana la 10^6 ar lua mai mult timp generarea si nici nu vad cu ce m-ar ajuta.
Ma opresc cand gasesc un factor care apare de doua ori, dar tot iau TLE. Am incercat sa exclud si patratele perfecte din cautare si tot TLE...
Calcularea vectorului X am observat ca ia peste jumatate din timp pe testele mari. Aici nu se poate optimiza nimic?
|
|
|
29
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 060 Critice
|
: Ianuarie 03, 2008, 15:03:22
|
Daca ai un graf cu 4 noduri si urmatoarele muchii + capacitati:
1 2 3 2 3 100 3 4 100
Capacitatea de la 1 la 4 este 3. Dar daca maresti capacitatea pe muchia 1 2 la 10, capacitatea de la 1 la 4 va fi 10. Daca in schimb maresti capacitatea pe muchia 2 3, capacitatea de la 1 la 4 tot 3 va ramane. Problema cere gasirea acestor muchii (cum e 1 2 - critica).
|
|
|
31
|
infoarena - concursuri, probleme, evaluator, articole / UVA / Răspuns: 10806 - Dijkstra, Dijkstra.
|
: Ianuarie 01, 2008, 20:21:45
|
Pai eu nu fac pur si simplu drum initial + eliminare muchii + inca un drum. Am zis ca fac unele modificari pe graf si pe acest drum. Pe exemplu imi da 8.
Cat despre algoritm, mai pe larg e cam asa:
Gaseste un drum minim de la 1 la n. Toate muchiile le inlocuiesc cu arce orientate catre sursa (mai exact, daca drumul e format din muchiile (1,2), (2,3), acestea vor fi inlocuite cu arcele 2->1 si 3->2). Costul acestor arce il pun pe -1. Rulez din nou algoritmul de drum minim (eu am ales bellman ford sa n-am probleme cu costurile negative..). Apoi elimin muchiile alese atat in primul drum cat si in cel de-al doilea, si imi raman muchiile drumului dus-intors.
Edit: Alte idei de rezolvare care ar fi? Am inteles ca se poate face si cu flux?
|
|
|
35
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 197 Semne
|
: 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!
|
|
|
41
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 564 Rfinv
|
: Noiembrie 19, 2007, 22:25:09
|
Pai, in solutia oficiala spune: Pe fiecare muchie a grafului (i,j) se pune o distanta egala cu valoarea A[j] (A fiind matricea data). Se aplica apoi algoritmul Roy-Floyd pe acest graf, iar matricea distantelor obtinuta trebuie sa fie identica cu matricea distantelor data (in caz contrar neexistand solutie). Eu asa am facut. Am mai pus si verificarea zisa de tine, dar tot incorect iau.. N-ar trebui sa ajunga doar pasii din solutia oficiala?
|
|
|
44
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 205 PScNv
|
: Noiembrie 06, 2007, 14:37:11
|
Tot nu cred ca am inteles... fac in felul urmator si iau 0 puncte, desi pe exemplu merge: Pentru liste am folosit STL vector. La inceput setez d[ x] = 0 si il adaug pe x in L[0]. Apoi, pentru fiecare i de la 0 la 1000, parcurg lista L[ i] cu un j si daca i == d[ L[ i][j] ], expandez aceste noduri, adaugand vecinii lor in listele corespunzatoare. Daca pot reduce vreun d pentru vecini, o fac... Ce n-am inteles? Banuiesc ca se poate intampla ca la un pas i, sa adaug un nod intr-o lista k < i, nod la care nu se va mai ajunge niciodata... atunci cum ar trebui sa procedez?
|
|
|
45
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 205 PScNv
|
: Noiembrie 05, 2007, 18:57:50
|
Mi-ar putea explica cineva mai pe larg un pic solutia oficiala, cea cu dijkstra modificat? Un lucru pe care nu-l inteleg este urmatorul: Cum ponderile muchiilor sunt numere de la 1 pana la 1000 inseamna ca in d[ i] oricare ar fi nodul i va fi intotdeauna mai mica sau egala cu 1000. d[ i] ce reprezinta? Daca reprezinta distanta de la sursa pana la nodul i, atunci aceasta poate lua valori mai mari decat 1000... deci ce reprezinta de fapt? Si inca ceva, listele astea cum se parcurg mai exact?
|
|
|
48
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 479 Paritate
|
: Octombrie 24, 2007, 21:51:26
|
Interesant, daca fac urmatoarele modificari: #include <stdio.h> #include <string.h>
char s[66000];
int main() { int i; FILE *f = fopen("test.in","w"); for (i = 0; i < 32000; i++) fprintf(f, "a"); for (i = 32000; i < 65000; i++) fprintf(f, "b"); fclose(f); f = fopen("test.in","r"); fscanf(f, "%s", s); i = strlen(s); printf("%d\n", i); return 0; } Afiseaza pe ecran 65000. Daca nu modific nimic, in fisier am valoarea 61440 la sfarsit. Daca folosesc un watch, mi-l arata pe i ca fiind tot 61440... Asta pe Windows cu compilator gcc. Banuiesc ca freopen e de vina...
|
|
|
|