•DITzoneC
|
|
« : August 13, 2007, 22:15:34 » |
|
Aici puteţi discuta despre problema Paritate.
|
|
|
Memorat
|
|
|
|
•swift90
Strain
Karma: 0
Deconectat
Mesaje: 7
|
|
« Răspunde #1 : August 20, 2007, 21:07:21 » |
|
cred ca ar trebui aranjate un pic testele deoarece am trimis sursa de vreo 10 ori pana am lua 100 (la restul evaluarilor Incorrect pe toate testele). singura greseala era la citire unde citea mai mult , adica linia de 0 si 1 nu se termina cu "\n" (conditia de oprire din while-ul de la citire). asta e o problema pentru unii deoarece am vazut cateva surse care au luat 100 din prima. cred ca depinde de cum face fiecare citirea.
|
|
|
Memorat
|
|
|
|
•Marius
|
|
« Răspunde #2 : August 20, 2007, 22:48:37 » |
|
Sigur depinde de citirea fiecaruia. Cauta o citire care sa nu mai depinda atat de '\n' si altele. Poti citi tot cu fread() intr-un sir de caractere si scoate datele "manual", asa cu i ++.
|
|
|
Memorat
|
Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
|
|
|
•eddie
Strain
Karma: 0
Deconectat
Mesaje: 1
|
|
« Răspunde #3 : Octombrie 24, 2007, 14:56:42 » |
|
memset(citit,0,sizeof(citit)); scanf("%s",citit); long val = strlen(citit); if( val > 60001) while(1);
-> tle.... deci la teste sunt ceva probleme cred...... daca asa sper sa le reparati va multumesc anticipat pentru efortul pe care il depuneti
|
|
|
Memorat
|
|
|
|
•Dastas
|
|
« Răspunde #4 : Octombrie 24, 2007, 15:06:32 » |
|
Prin 60 000 de caractere se refera la 60 000 de octeti... deci pune 60000*8.
Cam neclar intr-adevar... si '0' si '1' sunt caractere.
|
|
|
Memorat
|
|
|
|
•fireatmyself
|
|
« Răspunde #5 : Octombrie 24, 2007, 17:15:49 » |
|
... scanf("%s",citit); ...
%s mi se pare ca citeste doar 32000 de caractere. citeste cu fgets.
|
|
|
Memorat
|
Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
|
|
|
•DITzoneC
|
|
« Răspunde #6 : Octombrie 24, 2007, 21:06:43 » |
|
Ma indoiesc ca citeste doar 32000 caractere. Eu mereu citesc cu scanf.
|
|
|
Memorat
|
|
|
|
•fireatmyself
|
|
« Răspunde #7 : Octombrie 24, 2007, 21:30:22 » |
|
#include <stdio.h> #include <string.h>
char s[66000];
int main() { int i; freopen("test.in", "w", stdout); for (i = 0; i < 32000; i++) printf("a"); for (i = 32000; i < 65000; i++) printf("b"); freopen("test.in", "r", stdin); scanf("%s", s); i = strlen(s); printf("%d\n", i); return 0; } i-ul este 30000, desi in fisier am 65000 de caractere.
|
|
|
Memorat
|
Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
|
|
|
•Dastas
|
|
« Răspunde #8 : 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...
|
|
« Ultima modificare: Octombrie 24, 2007, 21:58:43 de către Ionescu Vlad »
|
Memorat
|
|
|
|
•fireatmyself
|
|
« Răspunde #9 : Octombrie 24, 2007, 22:06:35 » |
|
da, se pare ca ai dreptate. eu nu am prea folosit fopen pana acum. dubios gcc-ul asta...
|
|
|
Memorat
|
Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
|
|
|
•DITzoneC
|
|
« Răspunde #10 : Octombrie 24, 2007, 23:05:30 » |
|
Nu e nimic dubios. In momentul in care tu deschizi fisierul pentru citire mai are informatii ramase in buffer. Foloseste fflush() #include <stdio.h> #include <string.h>
char s[66000];
int main() { int i; freopen("test.in", "w", stdout); for (i = 0; i < 32000; i++) printf("a"); for (i = 32000; i < 65000; i++) printf("b"); fflush(stdout); freopen("test.in", "r", stdin); scanf("%s", s); i = strlen(s); printf("%d\n", i); return 0; }
|
|
|
Memorat
|
|
|
|
•astronomy
|
|
« Răspunde #11 : Octombrie 25, 2007, 08:43:45 » |
|
Oricum, windowsul e de vina, se intampla pe gcc sub windows sa-ti citeasca mai putine caractere cu scanf, dar nu e cazul sub linux.
|
|
|
Memorat
|
|
|
|
•DITzoneC
|
|
« Răspunde #12 : Octombrie 25, 2007, 10:03:16 » |
|
Fara fflush() de care am zis si pe linux citeste doar 61440 pentru ca nu se goleste bufferul inainte de deschiderea fisierului pentru citire.
|
|
|
Memorat
|
|
|
|
•astronomy
|
|
« Răspunde #13 : Octombrie 25, 2007, 10:14:44 » |
|
Am postat incomplet Eu ma refeream doar la partea cu "scanf citeste doar 30000 caractere".
|
|
|
Memorat
|
|
|
|
•Sycron
Client obisnuit
Karma: -141
Deconectat
Mesaje: 66
|
|
« Răspunde #14 : Decembrie 21, 2007, 22:43:59 » |
|
eu am gasit o rezolvare mai simpla nu va inteleg eu pe voi astia mari cum va complicati atata..(nu prea inteleg ce ati vrut sa comunicati mai sus dar nu conteaza ) am folosit un vector in care am memorat toti cei de '0' si '1'... problema e "Memori time limit exceeded" sau ceva de genu ... deci maximul de 0 si 1 e 60.000*8biti ( Textul transmis are cel mult 60000 caractere.) adica 480.000 de '0' si '1' .. e un vector cam mare, nu ?
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #15 : Decembrie 21, 2007, 23:09:54 » |
|
prima data ia 100 de puncte.. apoi explica rezolvarea daca e mai simpla...
|
|
|
Memorat
|
|
|
|
•Sycron
Client obisnuit
Karma: -141
Deconectat
Mesaje: 66
|
|
« Răspunde #16 : Decembrie 21, 2007, 23:24:39 » |
|
pai nam facut cine stie ce.. intrun vector am memorat toti cei '0' si '1' (vector cam mare-- ptr doar 1024kb limita de memorie...) si la evaluare primesc la toate OK .. mai putin la 4 teste (Memory limit exceded.. cu doar 40k mai mult decat limita) acuma ma gandesc la o solutie in care sa memorez direct in vector codurile ASCII ... folosind astfel o memorie de 8 ori mai mica .. teoretic noapte buna.. gandesc maine
|
|
|
Memorat
|
|
|
|
|
•bogdan2412
|
|
« Răspunde #18 : Decembrie 23, 2007, 08:44:09 » |
|
Cand depasesti memoria sau timpul programul este oprit in acel moment... nu e rulat pana se termina ca ar putea sta si ani de zile unele programe...
|
|
|
Memorat
|
|
|
|
•Sycron
Client obisnuit
Karma: -141
Deconectat
Mesaje: 66
|
|
« Răspunde #19 : Decembrie 23, 2007, 09:33:36 » |
|
ma refeream la exemplele la care am "OK!" . la alea am un timp putin mai mic decat cele de la problema pe care am luat 100pcte da nu mare diferenta +-1ms
|
|
« Ultima modificare: Decembrie 23, 2007, 09:56:42 de către Harabula Adrian »
|
Memorat
|
|
|
|
•cristiprg
Strain
Karma: -2
Deconectat
Mesaje: 23
|
|
« Răspunde #20 : Ianuarie 13, 2008, 20:59:01 » |
|
daca imi afiseaza corect programu, si mai exista caracterul spatiu, ii gresit? 0 puncte?
|
|
|
Memorat
|
|
|
|
•raduzer
Client obisnuit
Karma: 62
Deconectat
Mesaje: 71
|
|
« Răspunde #21 : Februarie 14, 2008, 17:37:17 » |
|
Nu pot intelege de ce iau 6 TLE. Eu am complexitatea O(lungimea textului*2). in rest iau 4 Killed by signal si nici aici nu imi dau seama unde busesc, chiar daca folosesc liste. http://infoarena.ro/job_detail/135825Daca aveti o sugestie sau ceva...
|
|
|
Memorat
|
|
|
|
•recviem
Client obisnuit
Karma: -26
Deconectat
Mesaje: 62
|
|
« Răspunde #22 : Februarie 14, 2008, 18:10:40 » |
|
SIGSEGV - daca folosesti liste vezi cum iti aloci memoria, sa nu citesti pe unde nu ai alocat. Sigsecv trimite programul atunci cand accesezi memorie aiurea.
|
|
|
Memorat
|
|
|
|
•raduzer
Client obisnuit
Karma: 62
Deconectat
Mesaje: 71
|
|
« Răspunde #23 : Februarie 14, 2008, 18:19:46 » |
|
Da stiu...numai ca eu folosesc liste numai la scriere...si m-am uitat acolo si nu pare nimic gresit...voi incerca sa citesc cu fgets. Sper ca va merge... [L.E.]: Acum citesc cu fgets si nu mai iau TLE, din pacate iau 4 WA...oricum ty for help [L.L.E.]: Stie cumva cineva ce au mai special testele 6,7,8 si 9? ca nu reusesc sa iau OK pe ele, iau WA
|
|
« Ultima modificare: Februarie 14, 2008, 19:30:08 de către Radu Zernoveanu »
|
Memorat
|
|
|
|
•savim
|
|
« Răspunde #24 : Februarie 14, 2008, 20:14:09 » |
|
Incearca sa citesti caracter cu caracter, poate busesti ceva la citire...
|
|
|
Memorat
|
|
|
|
|