|
Titlul: 106 Prefix Scris de: Mircea Pasoi din Septembrie 04, 2005, 23:47:24 Aici puteţi discuta despre problema Prefix (http://infoarena.ro/problema/prefix).
Titlul: 106 Prefix Scris de: Oltean Dorin din Septembrie 16, 2005, 16:27:53 este o linie in fisierul de intrare care arata cam asa
Citat aababcabcdabcdeabcdefabcdefgaerror si in fisierul de iesire zica ca lungimea celui mai lung prefix periodic este 2 aababcabcdabcdeabcdefabcdefgaerror eu cred ca subsirul ingrosat este un prefix periodic care are lungimea mai mare de doi unde este greseala ???? Titlul: 106 Prefix Scris de: u-92 din Septembrie 16, 2005, 17:49:53 nu ai inteles enuntul.. prefix - adica doar litere de la inceputul cuvantului.. in exemplul dat de tine cel mai lung prefix periodic este 'aa'
Titlul: 106 Prefix Scris de: Oltean Dorin din Septembrie 16, 2005, 18:58:25 mersi pentru ajutor am inteles gresit enuntul
sti am crezut ca oricare subsir periodic este calculat la cel ma mare :oops: Titlul: 106 Prefix Scris de: Paul-Dan Baltescu din Noiembrie 24, 2005, 15:33:31 Mie nu imi intra in timp citirea (lucrez in Pascal)... eu citesc asa:
Cod:
Exista vreo citire mai buna sau ceva? Titlul: 106 Prefix Scris de: Rus Cristian din Noiembrie 24, 2005, 16:13:57 nu ar trebui sa citesti din fisier? :-k
Titlul: 106 Prefix Scris de: Paul-Dan Baltescu din Noiembrie 24, 2005, 16:18:51 da, citesc din fisier... (am uitat sa adaug partea aceea)
si iau TLE pe testul 8. Testul 7 aproape imi iese din timp, de altfel cand trimit rezolvarea propriu-zisa iau si pe asta TLE... Titlul: 106 Prefix Scris de: andreit1 din Noiembrie 24, 2005, 17:17:54 Cea mai buna idee ar fi sa te apuci de C. Daca totusi nu ai timp de asa ceva incearca:
Cod: fillchar(v,sizeof(v),' '); unde v este vector de caractere. Asa o sa iti intre in timp( la limita, dar intra). Titlul: 106 Prefix Scris de: Andrei Grigorean din Noiembrie 25, 2005, 00:23:01 sau incearca sa folosesti seekeoln
Titlul: 106 Prefix Scris de: Paul-Dan Baltescu din Noiembrie 25, 2005, 08:29:15 multumesc frumos pentru idei...mi-a iesit... [-o<
(da, si probabil ca moi apuca de C in viitorul apropiat...) Titlul: Raspuns: 106 Prefix Scris de: Prigoana Alexandru din Aprilie 04, 2006, 21:04:42 aicia ii ceva kmp nu ? :-k
Titlul: Raspuns: 106 Prefix Scris de: Andrei Grigorean din Aprilie 04, 2006, 21:15:22 se poate si cu suffix arrays daca vrei sa te complici. :P
Titlul: Raspuns: 106 Prefix Scris de: ditzone din Aprilie 04, 2006, 21:26:21 Nu cred ca intra in timp un suffix array... si nici nu vad exact la ce iti foloseste..... KMP e numai bun :)
Titlul: Raspuns: 106 Prefix Scris de: Prigoana Alexandru din Aprilie 04, 2006, 21:36:55 suffix array nu stiu exact ce inseamna ... da vroiam sa folosesc functia prefix din kmp. LA asta se refere suffix array ?
Titlul: Raspuns: 106 Prefix Scris de: ditzone din Aprilie 04, 2006, 21:39:07 Nu, e o chestie ceva mai complicata.. gasesti un articol despre asta(suffix array) prin ginfo... daca poti sa faci rost de asa ceva :)
Oricum problema asta merge fara cmplicatii prea mari cu KMP Titlul: Raspuns: 106 Prefix Scris de: Prigoana Alexandru din Aprilie 04, 2006, 22:56:27 ](*,) ok cred cas batut in cap. Primesc pentru doua teste "RUN ERROR - Invalid memory reference", desi am declarat toti indicii si chiar toate variabilele long. NU ma prind ... poate exista teste si cu siruri mai lungi de 1.000.000 :D
Am dat acuma de curiozitate lmax = 10.000.000 si merge ... ciudat :) Titlul: Raspuns: 106 Prefix Scris de: ditzone din Aprilie 05, 2006, 12:16:05 M-am uitat peste teste toate au lungimea < 1.000.000
Titlul: Răspuns: Raspuns: 106 Prefix Scris de: Mihai Leonte din August 14, 2007, 21:39:04 ](*,) ok cred cas batut in cap. Primesc pentru doua teste "RUN ERROR - Invalid memory reference", desi am declarat toti indicii si chiar toate variabilele long. NU ma prind ... poate exista teste si cu siruri mai lungi de 1.000.000 :D Am dat acuma de curiozitate lmax = 10.000.000 si merge ... ciudat :) Pentru cei care scriu surse in C: Nu uitati cand declarati siruri de caractere ca sirurile se termina cu '\0' (sau NULL). Asta inseamna ca daca sirul are N caractere, trebuiesc memorate N+1. Eu imi mai iau din cand in cand cate o tzeapa din asta. Titlul: Răspuns: 106 Prefix Scris de: Dobre Catalin Andrei din Aprilie 28, 2008, 11:48:57 Am implementat solutia la problema prefix. Imi da TLE pe 7 si 8.
Am implementat cum s-a discutat pe topic, si ca sa aflu lungimea string-ului am facut o cautare binara. Tot 80 p iau. Exista cumva O(1) pentru lungime? Am trimis numai citirea forma banala si cea optimizata. Cea normala nu se incadreaza in timp si cea optimizata pe testul 8 imi ia 456ms. :'( . KMP-ul nu cred ca mai trebuie optimizat, din moment ce citirea consuma cea mai mare parte. >> Poate posta cineva un cod de Pascal pentru citire? << Cred ca ar fii o idee buna sa se faca un articol legat de citirea asta, eu unu nu stiam de ea si vad ca merge doar in FPC. P.S Parerea mea este ca timpul de executie sa fie usor marit pentru problemele cu input mare. Este enervant sa faci ideea de 100 si sa iei 80 ,95 din cauza citirii. P.P.S Bafta la ONI! Titlul: Răspuns: 106 Prefix Scris de: Paul-Dan Baltescu din Aprilie 28, 2008, 12:57:23 Problema se poate rezolva in O(N) (fara cautare binara).
[edit:] Limita de timp este intr-adevar enervanta pentru programatorii in Pascal, dar necesara pentru a diferentia solutii cu complexitate apropiata (presupun ca solutia ta e O(NlogN)). Titlul: Răspuns: 106 Prefix Scris de: Dobre Catalin Andrei din Aprilie 28, 2008, 22:37:22 Solutia mea este O(T*N) am folosit KMP partea cu prefix.
T-numarul de teste N-lungimea sirului Cautarea binara o foloseam doar la citire. deci am asa Cod: v:array[1..1000000] of char; dar cu cautarea binara imi reduce mult din parcurgere. Deci totusi,tu cum ai facut citire? :P Titlul: Răspuns: 106 Prefix Scris de: Paul-Dan Baltescu din Aprilie 28, 2008, 23:52:42 Asa ca tine, doar ca nu sunt sigur daca am luat vreodata 100p in Pascal pe infoarena2. :)
Titlul: Răspuns: 106 Prefix Scris de: Paduraru Ciprian - Ionut din Iunie 20, 2008, 13:40:05 Imi da si mie cineva o idee ?:( am incercat tot felul de optimizari dar nu gasesc nimic sa intre in timp..
In mod normal, as face ceva de genul asta : caut lungimea L a prefixului testez cate bucati de lungime L consecutive sunt in acel string si updatez maximul daca e cazul. asta e O(T * N^2) din pacate :( Singura optimizare pe care o vad ar fi sa nu mai caut fiecare lungime L, ci sa incep din anumite puncte, insa tot in N^2 ajung...imi poate da cineva o idee privind cum sa folosesc KMP -ul ? Titlul: Răspuns: 106 Prefix Scris de: Antoche Ioana Alexandra din Martie 30, 2009, 14:14:25 Eu iau doar 3 teste cu KMP :( !
Restul TLE... ](*,) Mai are cineva alte idei? :-/ Titlul: Răspuns: 106 Prefix Scris de: Flaviu Pepelea din Martie 30, 2009, 17:52:47 Problema se face cu KMP, daca iei TLE inseamna ca nu ai implementat corect algoritmul!
Titlul: Răspuns: 106 Prefix Scris de: Florian Marcu din Aprilie 16, 2009, 15:52:04 Am scos O(N), fara KMP. Initial mi s-a parut bulaneala, si nu ma asteptam sa ia 100 (in ciuda faptului ca nu am gasit teste pe care sa nu mearga). Dar acum cred ca este corecta solutia (http://infoarena.ro/job_detail/305127?action=view-source). In mare, o stare este definita de i, L si bst[ i ] . i e pozitia curenta, L este lungimea perioadei (acel P din enunt), iar bst[ i ] este nr de caractere care au fost puse la sfarsitul prefixului 1...i, din cele L ale perioadei. Si fac asa: daca s[ i ] == s[ i - L ], atunci bst[ i ] = bst[ i - 1 ] + 1, altfel bst[ i ] = 0 si L = i. De asemenea, daca cumva bst[ i ] == L, atunci fac bst [ i ] = 0. A mai rezolvat cineva asemanator ? :-k
Titlul: Răspuns: 106 Prefix Scris de: Vintur Cristian din Iunie 28, 2016, 18:40:34 Imi poate explica cineva de ce aceasta sursa (http://www.infoarena.ro/job_detail/1722764) ia TLE pe testul 8?
Multumesc Titlul: Răspuns: 106 Prefix Scris de: Valeriu Motroi din Iunie 28, 2016, 18:43:05 Adauga ios_base::sync_with_stdio(0);
mai jos de deschiderea fișierelor. Titlul: Răspuns: 106 Prefix Scris de: Vintur Cristian din Iunie 28, 2016, 19:10:57 N-a mers: http://www.infoarena.ro/job_detail/1722780 (http://www.infoarena.ro/job_detail/1722780)
|