infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: ditzone din Octombrie 23, 2005, 21:50:46



Titlul: 126 Lungimi de interval
Scris de: ditzone din Octombrie 23, 2005, 21:50:46
Aici puteţi discuta despre problema Lungimi de interval (http://infoarena.ro/problema/linterv).


Titlul: 126 Lungimi de interval
Scris de: Sergiu din Octombrie 30, 2005, 21:27:21
Imi poate explica si mie cineva exemplul din enunt? ca daca iau intervalele fara capeti imi da 16 iar daca iau si capetii imi da 21 iar in exemplu la .out este 18


Titlul: 126 Lungimi de interval
Scris de: u-92 din Octombrie 31, 2005, 13:45:56
Lungimea intervalului [a,b] este b-a
prin urmare avem:
[-5,5] -> 5-(-5) = 10
[0,3] - este inclus in [-5,5], nu il numaram
[2,8] - [2,5] este inclus in[-5,5], nu il numaram, mai ramane 8-5 = 3
[10,13] - nu e inclus nicaieri, 13-10 = 3
[11,15] - [11,13] este inclus in [10,13], mai ramane 15-13 = 2
[100,100] - are lungimea 0
Adunand obtinem 10+3+3+2 = 18


Titlul: 126 Lungimi de interval
Scris de: Savin Tiberiu din Martie 13, 2006, 16:31:31
problema parerea mea ca e formulata greshit, deoarece [A,B] nu este A-B ci este A-B+1. Pentru ca lungimea sa fie A-B trebuie ca unul din capete sa fie deschis primul sau al doilea.

Ex: intervalul [0,3] - calculat cu formula 3-0=3; dar intervalul contine 0,1,2,3 shi apeland la nishte cunostinte avansate de numarare mie imi da 4.
ati putea deschide unul dintre capete ptr ca problema sa fie formulata corect.


Titlul: 126 Lungimi de interval
Scris de: u-92 din Martie 13, 2006, 16:47:37
pai apeland la cunostinte nu chiar asa de avansate de numarare :) lungimea intervalului [0,3] este 3, cum ti-a dat tie 4?


Titlul: 126 Lungimi de interval
Scris de: ditzone din Martie 13, 2006, 16:48:32
Apeland la niste cunostinte matematice un pic mai avansate decat simpla determinare a cardinalului multimii {0,1,2,3} o sa afli ca intr-un interval [a,b], a<b sunt o infinitate de numere reale.
Lungimea intervalului se refera de fapt la lungimea segmentului determinat de intervalul respectiv pe axa numerelor reale.


Titlul: 126 Lungimi de interval
Scris de: Savin Tiberiu din Martie 14, 2006, 15:42:30
deci sa inteleg ca idea mea de a face un vector de la -1 000 000 la 1 000 000 (adik un a[2 000 000]) shi apoi sa iau un intervalul si sa notez cu unu toate elementele incepand cu x+1 000 000 - y+1 000 000 (pentru a nu ma complica cu indexare negativa, lucru care am vazut ca este posibil intrun articol de pe infoarena) nu functioneaza. Pacat, tre sa gasesc o idee de a uni intervalele care se suprapun se pare :( . asta e


Titlul: 126 Lungimi de interval
Scris de: Andrei Grigorean din Martie 14, 2006, 15:57:53
vezi poate te ajuta la ceva o sortare ;)


Titlul: 126 Lungimi de interval
Scris de: Savin Tiberiu din Martie 14, 2006, 16:00:37
da mi-am dat shi eu seama ca ar trebuie sa fac chestia asta. DUDE you're a genius, chiar in tim ce scriam acest post mi-am dat seama cum se face problema, chiar dak shtiam ca trebuie sa fac sortarea, aveam eu impresia ca ar exista un caz ptr care nu ar merge, caz care este eliminat prin acea sortare de fapt. Thanx dude.


Titlul: 126 Lungimi de interval
Scris de: ag3nt_junior din Martie 15, 2006, 15:01:41
Frumoasa problema.. Mie nu mi se incadreaza in timp nici macar citirea. Voi cum cititi in c++?


Titlul: 126 Lungimi de interval
Scris de: Marius Stroe din Martie 15, 2006, 17:14:45
Incearca sa folosesti fscanf() ! :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Gabriel Bitis din Martie 30, 2007, 18:57:47
imi puteti da niste teste  :-'.. mie imi iese exemplul dat in problema.. imi intra in timp.. dar rezultatul se pare ca e incorect...


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Airinei Adrian din Martie 30, 2007, 19:06:10
Te sfatuiesc sa mai faci un program brute-force care determina tot timpul rezultatul corect, apoi sa dai teste si sa compari rezultatele, cred ca asta e cea mai buna metoda sa faci debug :thumbup:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Gabriel Bitis din Martie 30, 2007, 19:37:36
nu stiu cum se face chestia aia :sad:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Airinei Adrian din Martie 30, 2007, 21:13:27
Ai un vector de 2.000.000 in care daca A[ x ] == 1 punctul x a fost "atins" de vreun segment. Acum iti este usor sa calculezi rezultatul (cauti secventele de 1 din vectorul asta). Iar ca sa generezi teste faci pur si simplu un alt program care scrie date in fisierul tau de intrare. (arunca o privire si peste functia rand() din stdlib.h).


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 01, 2007, 10:16:10
Exista vreo sansa sa pot declara un vector de 2.000.000??? :-'


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Savin Tiberiu din Aprilie 01, 2007, 10:18:56
dap. Dak e long int :  2 000 000 * 4 = 8 000 000 /1024/1024 = 7 MB


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 01, 2007, 16:04:37
Aham...multumesc! Nu-mi iesea deoarece il declarasem long long (kiar dak nu e nevoie pt problema asta):D....am reusit sa nu mai iau kill by signal 11, insa imi depaseste timpul...incerc sa mai optimizez...dak nu se poate o sa incerc alta metoda...


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pandia Gheorghe din Aprilie 01, 2007, 18:52:46
Se poate lua 100p intr-un timp de 416ms daca descoperiti o conditie. Hint: Unele intervale A, B deja sunt adaugate la suma.  :wink:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 11, 2007, 16:10:50
Deci..am abandonat faza cu vectorul de 2000000..k`mi iese din timp.... ???
Insa si akum imi iese.desi am facut in urm fel:
 -ordonez crescator dupa a, iar in caz de egalitate crescator dupa b (a,b capetele intervalelor)
 -apoi iau si compar in 0(n) intervalele..adunand lungimile....
Pe testele mele imi da rezultate corecte...dar imi iese din timp...
Stie careva o metoda de optimizare??pls..help me... :fool:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pandia Gheorghe din Aprilie 16, 2007, 14:56:39
Rezolvarea pare ok si ar trebui sa se incadreze in timp. Numai sa nu fi gresit ceva la implementare. Depinde si ce sortare ai folosit. Complexitatea ar trebui sa fie maxim n^2 pe 3 sec. Nu cred sa intre n^3. Incearca alta metoda de sortare, poate o scoti la capat  :ok:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: ctes tesc din Aprilie 16, 2007, 15:09:14
si cum speri u sa obtii cu o sortare si o comparare/parcurgere (de parcurs tot treb sa parcurgi tot) O(n^2), in cel mai fericit caz obtii O(n*n*log(n))
LE: acest cel mai fericit se refera la quicksort, care daca ai ghinion poate sa ajunga la O(n*n)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pandia Gheorghe din Aprilie 16, 2007, 15:17:18
O(n*n*log n) cred ca intra in timp. Eu nu fac sortare, de aceea am n^2. Si asta pe cel mai defavorabil caz, deci sunt sanse sa mearga chiar mai rapid. Dupa cum am zis mai sus, solutia mea are 416ms. Dar un O(n*n*log n ) cred ca e suficient.

LE: Pentru edit-ul cu quick sort. Poti folosi Interclasare, care merge mereu in O(n log n) pe orice caz. Quick-sort nu e cea mai rapida, doar ca la raportul timp/memorie e cea mai buna. Dar memorie e suficienta si pentru Interclasare.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: ctes tesc din Aprilie 16, 2007, 15:28:42
da dar rezolvarea ta cu O(n*n), dak e cea la care ma gandesc eu e km neortodoxa :P


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Ivan Nicolae din Aprilie 16, 2007, 15:32:06
important e sa mearga..... :-'


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pandia Gheorghe din Aprilie 16, 2007, 15:37:23
Nu stiu daca e cea la care te gandesti si nici de ce crezi ca ar fi neortodoxa. Insa am de facut o observatie: Ordonare in O(n*log n) si parcurgere/comparare in O(n) inseamna O(n + n*log n ) si nu O( n*n log n ) deci pana la urma e mai buna decat rezolvarea mea si ar putea obtine un timp mai bun!


Titlul: Răspuns: 126 Lungimi de interval
Scris de: ctes tesc din Aprilie 16, 2007, 15:49:57
 ](*,) intr-adevar... :fool:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 16, 2007, 16:15:33
Rezolvarea pare ok si ar trebui sa se incadreze in timp. Numai sa nu fi gresit ceva la implementare. Depinde si ce sortare ai folosit. Complexitatea ar trebui sa fie maxim n^2 pe 3 sec. Nu cred sa intre n^3. Incearca alta metoda de sortare, poate o scoti la capat  :ok:

Ms mult...am folosit bubble sort..voi incerca quicksortul... :thumbup:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Andrei Grigorean din Aprilie 16, 2007, 19:44:47
Quick-sort nu e cea mai rapida, doar ca la raportul timp/memorie e cea mai buna. Dar memorie e suficienta si pentru Interclasare.

Sort-ul din STL are complexitatea pe cazul defavorabil O(N log N) si merge in practica mai bine decat orice algoritm scris de mana.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 16, 2007, 20:06:45
Ai putea sa mi detaliezi kum sta treaba cu " sort-ul din STL "? adik as vrea sa-mi explici putin...k nu stiu ce trebuie sa fac...(gandeste-te k e prima data knd aud expresia asta) ](*,)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Paul-Dan Baltescu din Aprilie 16, 2007, 20:20:00
In principiu, primul lucru ar trebui sa lucrezi in C++. Tre sa bagi "#include <algorithm> si using namespace std;" la inceputul sursei. Apoi daca vrei sa sortezi vectorul a crescator, faci asa: sort(vector+pozitiestart,vector+pozitiefinal+1); [de exemplu sort(a+1,a+n+1);].

Daca vrei sa sortezi dupa alt criteriu poti face asa: sort(a+1,a+n+1,functie); si mai faci o functie cu criteriul respectiv de sortare care primeste doi parametrii. De exemplu:

int functie(int i,int j)
{
     return i>j;
}

Asta le sorteaza descrescator. Atentie! Nu pune si "=". Poti sa ai probleme.

Ah da...Nu exista asa ceva in Borland.



Titlul: Răspuns: 126 Lungimi de interval
Scris de: nash mit din Aprilie 16, 2007, 20:59:40
da .. dar in borland ai qsort :) ..


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan-Cristian Tataroiu din Aprilie 16, 2007, 21:07:32
Nu prea as compara performanta unui compilator modern pe 32 biti cu unul pe 16 biti facut pt 386...

Oricum sort e mai rapid ca orice, inclusiv qsort :P


Titlul: Răspuns: 126 Lungimi de interval
Scris de: HighScore din Aprilie 16, 2007, 21:08:41
apropo de stl, are careva un help in care sa fie explicate sintaxele si functiile(cum e cel de borland), ca din cate am observat versiunile de rhIDE nu au help iar Dev imi prind urechile urat de tot prin al help.
PS. ma refer exclusiv la windows(in linux n-am trecut de freecell  :D)
PPS. sorry pt offtopic


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Andrei Grigorean din Aprilie 16, 2007, 21:09:49
http://www.sgi.com/tech/stl/


Titlul: Răspuns: 126 Lungimi de interval
Scris de: nash mit din Aprilie 16, 2007, 23:56:43
 Nici nu am zis ca e mai rapid qsort decat sort din stl .. dar .. exista si solutia asta pentru borland .. asta daca nu vrei sa implementezi manual sortarea ....


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Aprilie 17, 2007, 06:10:35
Lucrez in c++..insa in borland...:(...multumesc pt ajutor... :sad:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Ionescu Robert Marius din Decembrie 29, 2007, 16:45:06
iar apelez la problema reactivi  :peacefingers: nu se face lafel numai ca in loc sa numeri carte intervale gasesti numeri lungimea lor??  :wink:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Florian Marcu din Decembrie 29, 2007, 18:04:29
Pai iti merge? Sa ai grija si ce sortare faci...  :thumbup:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Farcasanu Alexandru Ciprian din Martie 01, 2008, 10:45:04
Mai...nu ma prind la exemplu:
intre -5 si 5 avem 11 nr noi(-5,-4...,0,...,4,5)
intre 0 si 3 avem 0 nr noi(au fost include in intervalul [-5,5])
intre 2 si 8 avem 3 nr noi(6,7,8)
intre 10 si 13 avem 4 nr noi(10,11,12,13)
intre 11 si 15 avem 2 nr noi(14,15)
intre 100 si 100 avem 1 nr nou(100)
 daca adunam :11+3+4+2+1=21


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Airinei Adrian din Martie 01, 2008, 10:51:00
Citeste si tu toate posturile inainte.. La intrebarea ta gasesti raspunsul pe prima pagina, al treilea post.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Farcasanu Alexandru Ciprian din Martie 01, 2008, 10:52:32
Ups, srry, nu m-am uitat :aha:...dar oricum mi se pare putin cam ciudat ca nu e b-a+1

Intrebare: cum face evaluatorul online?  asteapta ca programul sa se incheie si apoi verifica ce este in .out sau verifica in timp ce programul ruleaza, iar in caz ca a afisat ceva gresit se opreste?


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan-Cristian Tataroiu din Martie 01, 2008, 12:10:50
verifica la sfarsit, dupa ce s-a incheiat / a fost incheiat.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: gaboru corupt din Aprilie 24, 2008, 17:40:20
tot timpul asta mi se intampla...cand nu imi iasa o problema cer teste :-' asa ca indraznesc la bunovointa voasta pt un test mai mare.. :D

P.S.: pt testele mici imi iasa :sad:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan-Alexandru Stoica din Aprilie 24, 2008, 20:59:58
Cod:
1
544
-873345 788007
-692110 207152
-94465 24653
-257215 405023
92809 139474
361686 396503
435859 444935
151831 174707
244333 259535
481994 496112
384878 420775
400840 424333
491070 533077
166125 177070
352835 400986
155282 182868
302803 338406
368261 401516
489988 508109
271273 276557
234764 272211
167500 216030
64356 97742
9523 17908
301329 312407
258218 299643
126630 163977
385213 418577
395798 415007
221707 265204
280593 301270
95311 142491
228732 268122
371445 399771
137553 154844
-588473 31004
-214733 685815
-144744 358243
-141595 558264
-371812 439210
-393338 613454
-308277 945311
-930815 674463
-788896 473118
-369187 333336
-667110 940362
-615149 486431
-327062 365057
-328000 937506
-313355 386190
-776667 720007
-535756 998642
-916011 205446
-963053 946012
-47625 547297
-17747 982486
-767986 107299
-349042 604624
-412223 959396
-849503 648673
-106441 425632
-36271 640592
-825863 710785
-374826 17823
-284617 387182
-92379 12614
-988287 635700
-461740 205132
-759039 84450
-888988 463776
-333019 718977
-742905 763855
-452833 631270
-250375 792216
-363644 585021
-830541 178005
-648955 526664
-38786 616727
-863686 778494
-824006 631685
-817363 419391
-943236 903217
-125638 333588
-913587 284125
-746196 429308
-625239 578191
-272620 742025
-679008 717687
-514266 283106
-70537 675705
-987972 346425
-899518 7314
-250380 671262
-710914 946802
-704131 483987
-589954 965032
-908832 157202
-150992 403640
-6088 364814
-666047 274366
-843566 456717
-60221 424013
-294129 402515
-587785 918108
-170609 904475
-163763 121526
-946825 329971
-978712 547870
-146627 595701
-777352 489624
-517116 976042
-117641 8070
-928611 235197
-360034 637599
-517962 527061
-612382 534964
-721182 236060
-150025 198509
-815755 45739
-806945 542294
-957137 435265
-265022 594387
-390959 447233
-345862 59305
-162455 762970
-79379 951247
-862035 289346
-243052 956301
-914578 172237
-673037 42353
-410719 634133
-474200 867646
-200577 96510
-106396 543666
-274290 363753
-628383 608022
-152059 899942
-954605 577916
-163682 605375
-133800 758327
-783398 136363
-929225 84433
-339845 189278
-489378 880722
-928567 668725
-677788 76485
-66024 475761
-784086 630154
-420339 196314
-376804 562166
-642436 426087
-301576 493164
-669218 267063
-226218 925452
-380760 597531
-611439 675587
-491021 975785
82196 106105
434261 436335
128004 176059
286330 323596
316645 339510
377142 420995
446035 489215
287216 306283
58491 104689
136272 184950
298458 300364
175622 199996
138940 148784
321222 368802
81163 108266
130219 138471
-922737 431339
-648817 734271
-495592 701823
-740609 698321
-286504 990906
-851815 922424
-591367 583711
-80172 327032
-744813 734440
-67968 844162
-551528 72191
-520686 298839
-144782 408509
-931750 348258
-257843 591924
-199859 583186
-192167 907402
-780028 581418
-639523 957516
-732975 988979
-649471 632128
-350140 852847
-902739 253186
-736461 187938
-689905 172517
-348848 36905
-614831 391643
-171740 49136
497166 508168
37618 86425
306835 340350
370796 419375
290481 337383
423767 453460
72629 119003
211554 260299
405732 443649
291626 324235
105870 131954
127062 132813
136970 179404
239980 270856
478819 506951
402541 404771
154090 200333
118898 138580
161859 175352
455393 503773
499506 539033
312888 339945
275132 322245
339443 382325
41005 82781
302928 349867
-526803 828336
-917414 701911
-339829 673774
-383701 469272
-374040 388407
-430942 615189
-896608 628936
-724893 767218
-117310 28665
-202131 260027
-425989 319078
-362172 758743
-836952 124488
-97965 354631
-131430 250613
-14330 45417
-946228 41626
-621032 742761
-183314 590668
-247391 861776
-14364 292952
-647156 91564
-168101 115341
-223390 881790
-53424 116556
-332262 393454
-674461 805477
-593111 20183
-518999 877981
-209815 740439
-325477 860609
-477569 40262
273955 285787
160549 168001
4802 6069
410769 453528
224314 263469
250853 292158
48231 49287
144905 151722
45884 90996
408718 446790
149605 198538
21832 57348
458609 482496
433437 451308
329607 372233
8941 50103
119576 121915
300543 340888
316157 348496
142856 179891
3913 41055
64348 66357
472190 505976
174609 175784
17320 60425
69692 116957
404002 404773
132480 170002
330068 374919
300816 304103
234358 252334
403646 405815
244212 250761
27963 50584
286575 293357
-301568 967200
-613178 702065
-295446 85522
-490263 526666
-451523 953814
-716146 151767
-807645 527867
-607362 560635
-907504 726845
-706938 672120
-820098 510287
-397125 665020
-694977 92324
-260894 167985
-80856 563829
-121356 245328
-753665 211234
-270761 832110
-964679 578861
-982709 848421
-176394 82535
-598171 16158
-636821 719270
-920666 244222
-524162 449163
-990900 600992
-931633 900159
-216948 981196
-483482 34163
-172697 758347
-929019 72004
-888557 509392
-376324 100642
-345105 375736
-167823 471361
-960428 807481
-647622 206142
-274343 589326
-260176 892223
-971651 857424
-97781 784648
-651829 457773
-753964 438060
-71067 365610
-5760 145951
-734972 414725
-957987 433940
-783849 368756
-384434 928026
-130549 461502
-483319 486386
-174869 257003
-73703 530801
-117116 904906
-160894 547061
-606098 958829
-772977 991781
-453847 792019
-728887 187341
-332374 507206
-216569 141115
-203325 80898
-217487 643707
-840453 195550
-599812 368447
-124776 987179
-541309 901509
-463287 384212
257751 284098
316882 362776
262435 282974
269128 298724
57660 67874
98823 126827
349724 361374
127232 143965
72051 95804
182774 226496
364257 391012
416840 420121
444940 467871
262730 281875
385355 386474
157275 186901
267242 271798
108440 154806
216941 229308
380014 403031
12399 51954
105225 141516
262204 301233
415040 419076
278221 282720
256451 281669
36192 47950
367307 374110
191074 207025
487239 533181
185427 194352
175579 183000
86677 134690
126521 157391
237884 267744
443831 475627
425601 449554
473068 503440
475339 480841
93470 106190
279055 308266
135293 175537
60531 92689
-530414 237906
-912764 38389
-951100 323594
-780371 749195
-244304 612530
-855793 18896
-448618 860108
-248948 356898
-548061 17412
-967112 940326
-508126 448432
-853298 248030
-590657 643367
-149577 939369
-299051 806975
-268402 154956
-118201 949966
-162474 159170
-367442 940122
-486192 423996
-52418 160202
-774794 310556
-788447 885875
-298799 78888
-1976 410685
-91786 652153
-465426 506429
-194564 518274
-813083 688582
-182092 216013
-899978 634016
-544650 781506
-956580 652650
-974033 66585
-949766 433505
-588444 391349
-365409 399956
-252634 832460
-20130 428108
-192044 741279
-442862 461070
-878644 393858
-323564 529145
-221377 468495
-227415 753854
-541100 563963
-547793 458896
-867418 186372
-156694 698178
-529661 384900
-780637 808543
-729736 357666
-753331 816867
-174315 852262
-139642 147279
-307500 165354
-846643 38836
-946652 856795
-230507 391311
-919013 878299
-887471 503136
-622696 471589
-550645 308474
-60272 166530
-342030 324693
-676783 612986
-418100 233946
-397358 811339
-679231 694503
-625739 473326
-823064 320760
-546500 62666
-940920 56697
-177633 905599
-498546 616953
-626722 916616
-432213 527779
-190581 440248
-116573 850273
-394487 459126
-143899 677416
-941636 216471
-286987 687781
-589912 501433
-162434 658920
-298509 713864
-964721 922427
-136755 82597
-789863 432930
-510682 882033
-769223 414297
-508096 475391
-589920 19526
-709721 781095
-640405 580526
-948582 144410
-478558 271607
-773398 784698
-879326 157696
-91663 135238
-700779 779539
-147985 418983
-567824 537809
-975946 879858
-575941 875482
-781382 399344
-412825 871663
-911936 49559
-668743 797245
-553639 350816
-42187 863189
-68320 309108
-336807 714124
-923801 438505
-449587 197978
-805578 765488
-313530 621686
-834763 789170
-806982 291595
-336492 238264
-875021 748182
-928914 440134
-886725 862126
-480227 876567
-504322 370382
-758 114618
-369724 319287
-312951 596375
-590464 365097
-984983 667322
-365095 590845
-104833 854269
-84503 477433
-578721 746814
-488944 845955
-365813 591612
-943622 269465
-219268 767758
-392385 988986
-765077 907778
-242531 937701

lungimea este 1989542.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: gaboru corupt din Aprilie 24, 2008, 23:36:02
am observat ca in exemplul tau, mi-ai dat 546 de intervale... acuma ce sa inteleg: ca trebuie eleminate doua intervale de acolo, sau n=544  :'( lamureste-ma plz


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Gabriel Bitis din Aprilie 24, 2008, 23:39:46
Daca pui exemplul exact asa cum e acolo, o sa se ia in considerare doar primele 544 intervale. Raspunsul ar trebui sa fie acelasi.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: gaboru corupt din Aprilie 25, 2008, 00:14:32
da, aia am inteles, dar daka eu mai pun un test...pica...o sa imi citesca n=-700000 ceva pe acolo...si din aia nu eram lamurit :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan-Alexandru Stoica din Aprilie 25, 2008, 10:25:45
imi cer scuze, am numarat prost  :-'. si cu n=544 si cu n=546 iti da acelasi raspuns, 1989542. sper sa te ajute  :thumbup:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: gaboru corupt din Aprilie 25, 2008, 11:28:22
am reusit pana la urma sa o rezolv.. merci mult :ok:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Fodor Gabor din Mai 07, 2008, 06:16:45
Am nevoie si eu de lamurire  :?
Fac sortarea in NlogN pe un vector<pair<int,int>> si iau TLE
citire numai - 244 ms - http://infoarena.ro/job_detail/188199 (http://infoarena.ro/job_detail/188199)
citire + sortare numai - TLE - http://infoarena.ro/job_detail/188201 (http://infoarena.ro/job_detail/188201)
Daca nu intra nici cu vectoruri si cu citire din stream in timp, in pascal e chiar "impossible, like girls in stilettoes trying to run".
N-as dori sa renunt de STL si de programarea propriu-zis C++  :?
Hint?


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Andrei Grigorean din Mai 07, 2008, 09:15:36
Probabil ca sunt o gramada de chestii unde ai putea optimiza: sa nu folosesti un vector ci un array static, poate poti sa optimizezi citirea, etc. E frumos C++, dar deocamdata e mai sigur in concursuri sa nu faci excese de STL.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Fodor Gabor din Mai 07, 2008, 09:36:46
Cine se mai duce la concursuri  :harhar:
Cel putin la ACM nu apar probleme cu limitele stranse de timp  :)
Merci oricum.. back to the basics  :wink:

PS : Pascal chiar are vreo sansa?


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Andrei Grigorean din Mai 07, 2008, 10:10:55
Poti sa te uiti in monitor la sursele trimise in pascal (http://infoarena.ro/monitor?task=linterv&compiler=fpc).


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Fodor Gabor din Mai 07, 2008, 12:21:38
Mea culpa. Am gresit eu. Scuze pt oftici  :D

PS : 100 fara sa renunt de STL  :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Ionescu Robert Marius din Mai 08, 2008, 09:47:16
Pe testul de pe forum imi da bine ,pe testele mele imi da bine, si totusi iau incorect :( de ce oare?     :peacefingers:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Andrei Misarca din Mai 08, 2008, 09:53:21
Incearca si testu asta  :D
Cod:
2
6
0 4
1 4
6 7
3 4
2 4
4 5
7
-100 100
1 2
3 4
1 3
89 90
23 56
12 13


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Ionescu Robert Marius din Mai 08, 2008, 09:55:52
dap  :aha: eu nu sortam si nu mai aveam cum sa unesc alea 2 intervale de la primul test :D ms andrei  :peacefingers:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: UAIC.VlasCatalin din Iunie 29, 2011, 15:28:06
ajutatima va rog, programul meu in turbo pascal merge pentru orice test, chiar si pentru testul cela mare din comentarii merge corect in 0.1 sec., dar in free pascal cind dau programul la executie, imi apare mesajul "exited with exit code 201" ](*,)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Serban Andrei Stan din Iunie 29, 2011, 17:30:14
Cred ca eroarea pe care o primesti se datoreaza unui segmentation fault.

Uite un thread (http://community.freepascal.org:10000/bboards/message?message_id=269043&forum_id=24094) care ar putea sa te ajute.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Raul Butuc din Noiembrie 25, 2012, 22:32:44
Imi poate spune si mie cineva ce e gresit in codul meu ?
Nu inteleg care ar putea fi problema (poate afisarea pe rand nou a solutiilor?...).

Multumesc anticipat

PS: Rezultatele par a fi ok din ceea ce am vazut eu ca si teste..
PS2: Ar putea cineva sa imi puna la dispozitie testul oficial (sau alte teste pe care sa le incerc) ?

Cod:
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

int n, T;
ifstream in("linterv.in");
ofstream out("linterv.out");

class Interval{
long long a, b;

public:
inline long long getA() const { return a; }
inline long long getB() const { return b; }
friend bool operator<(const Interval&, const Interval&);
friend istream& operator>>(istream&, Interval&);
};

bool operator<(const Interval& x, const Interval& y){
return x.getA() < y.getA();
}


istream& operator>>(istream& is, Interval& inter){
is >> inter.a >> inter.b;
return is;
}

void readData(vector<Interval>& Io, Interval& inter){
Io.clear();

if (in && !in.eof()){
in >> n;
}

for (int i = 0; i < n; i++){
in >> inter;
Io.push_back(inter);
}
}

void processAndWrite(vector<Interval>& Io){
int L = 0, X = INT_MIN;
sort(Io.begin(), Io.end());
size_t i = Io.size()-1;

for (int j = 0; j < i; j++){

if (Io[j].getA() >= X){
L += Io[j].getB() - Io[j].getA();
X = Io[j].getB();
}
else
if (Io[j].getA() < X && Io[j].getB() <= X){
continue;
}
else
if (Io[j].getA() < X && Io[j].getB() > X){
L += Io[j].getB() - X;
X = Io[j].getB();
}
}

out << L << "\n";
}

int main(int argc, char *argv[]){
vector<Interval> Int;
Interval inter;
in >> T;
do{
readData(Int,inter);
processAndWrite(Int);
T--;
}while (T > 0);
return 0;
}


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Radu-Andrei Szasz din Noiembrie 30, 2012, 22:14:59
In primul rand, incearca sa faci o implementare mai simpla, in primul rand. A ta mi se pare foarte greu de urmarit.
Ce mi-a sarit in ochi este faptul ca tu te duci cu j de la 0 pana la Io.size() - 2. Cred ca ar fi corect sa mergi pana la Io.size() - 1.

Hope it helps :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Raul Butuc din Decembrie 01, 2012, 22:14:45
Am gasit problema. Si apropo, Io.size()-1 am scris... Thanks anyways.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Radu-Andrei Szasz din Decembrie 02, 2012, 13:02:22
size_t i = Io.size()-1;
for (int j = 0; j < i; j++)
=> faci parcurgerea de la 0 la Io.size() - 2.

Oricum daca ai gasit nu mai conteaza  :ok:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Tatomir Alex din Decembrie 18, 2012, 16:28:20
Am si eu cateva intrebari:
1. Intervalele sunt date in ordine (x,y) cu x<y?
2. Intervalele sunt date in ordine ? (adica daca avem intervalele [x1,y1] si [x2,y2] atunci avem x1 < x2?)

Multumesc mult!


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pirtoaca George Sebastian din Decembrie 18, 2012, 18:26:40
1. DA.
2. NU.
Succes!  :ok:


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Tatomir Alex din Decembrie 18, 2012, 22:01:44
Mutumesc!


Titlul: Răspuns: 126 Lungimi de interval
Scris de: FMI Stirb Andrei din Aprilie 06, 2013, 10:46:48
Pot sa dau un hint celor folosesc pentru aceasta problema vector de pair?
Aveti grija unde declarati vectorul, daca vreti sa nu aveti probleme cu timpul. Desi daca stau mai bine sa ma gandesc ar fi o regula general valabila, indiferent de ce metode folositi :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Johnny Depp din Aprilie 07, 2013, 15:54:46
Pot sa dau un hint celor folosesc pentru aceasta problema vector de pair?
Aveti grija unde declarati vectorul, daca vreti sa nu aveti probleme cu timpul. Desi daca stau mai bine sa ma gandesc ar fi o regula general valabila, indiferent de ce metode folositi :)
si unde mai exact ar trebui sa il declaram?


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Pirtoaca George Sebastian din Aprilie 07, 2013, 17:32:05
Daca declari, in general, vectori in stiva (adica local) programul o sa mearga mai repede, dar trebuie sa ai grija sa nu iesi din limita de memorie pentru stiva.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Johnny Depp din Aprilie 07, 2013, 22:06:38
multumesc! nu stiam asta, dar de acum o sa tin minte :)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Dospra Cristian din Mai 17, 2013, 08:43:47
Mie imi da bine pe testul lui fireatmyself (indiferent ca am pus 544 sau 546 :P ) si totusi imi da WA pe testul oficial... ](*,)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mercea Otniel din August 19, 2013, 12:08:15
ce este gresit imi da incorect
Cod:
#include<iostream>
using namespace std;
#include<stdio.h>
#include<algorithm>
FILE *f,*g;
int i,j,n,t;
long long l,x=-1000010;
struct puncte
{
    long a,b;
};
long cmp(puncte a,puncte b)
{
    return a.a<b.a;
}

puncte q[5001];
int main()
{
    f=fopen("linterv.in.txt","r");
    g=fopen("linterv.out.txt","w");
    fscanf(f,"%d\n",&t);
    while(t)
    {fscanf(f,"%d\n",&n);
    for(i=0;i<n;i++)
        fscanf(f,"%ld%ld\n",&q[i].a,&q[i].b);
    sort(q,q+n,cmp);
    for(i=0;i<n;i++)
         if(q[i].a>=x)
            {x=q[i].b;
         l=l+q[i].b-q[i].a;}
         else
            if(q[i].a<x&&q[i].b>x)
            {l=l+q[i].b-x;
         x=q[i].b;}
        fprintf(g,"%lld\n",l);
        t--;
        for(i=0;i<n;i++)
            cout<<q[i].a<<" "<<q[i].b<<endl;
    }

}
[Editat de moderator]: Foloseste tagul [ code ], [ /code ]


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bucevschi Alexandru din Decembrie 11, 2013, 17:56:04
mie imi ia testul din exemplu si testul din comentarii dar imi da WA si nu inteleg de ce?
Cod:
 #include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("linterv.in");
ofstream fout("linterv.out");
int t,i,j,n,x,y,mini,sol;;
void rezolvare()
{
    vector<pair<int,int> >a;
    vector<pair<int,int> >::iterator it;
    fin>>n;
    for(j=1;j<=n;j++)
    {
        fin>>x>>y;
        a.push_back(make_pair(y,x));
    }
    sort(a.begin(),a.end());
    it=a.end()-1;
    mini=it->second;
    sol+=it->first-it->second;
    it--;
    for(;it>=a.begin();it--)
    {
        if(mini<it->first&&mini>it->second)
        {
            sol+=mini-it->second;
            mini=it->second;
        }
        else
        {
            if(mini>it->second)
            {
                mini=it->second;
                sol+=(it->first-it->second);
            }
        }
    }
    fout<<sol<<'\n';
}
int main()
{
    fin>>t;
    for(i=1;i<=t;i++)
    {
        rezolvare();
    }
    return 0;
}


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mercea Otniel din Februarie 17, 2014, 21:19:34
Cod:
#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
FILE *f,*g;
int n,i,j,t;
struct punct
{
    long long a,b;
};
punct c[5005];
int aux[5005];
long long num;
int tu(int p,int m,int q)
{punct b[5005];
    int i1=p,i2=m+1,x=0;
    while(i1<=m&&i2<=q)
    {
        if(c[i1].a<c[i2].a)
        {
            b[x]=c[i1];
            x++;
            i1++;
        }
        else
            if(c[i1].a>c[i2].a)
        {
            b[x]=c[i2];
            x++;
            i2++;
        }
        else
        {
            if(c[i1].b<c[i2].b)
            {
                b[x]=c[i1];
                x++;
                i1++;
            }
            else
            {
                b[x]=c[i2];
                x++;
                i2++;
            }
        }
    }
    while(i1<=m)
    {
        b[x]=c[i1];
        x++;
        i1++;
    }
    while(i2<=q)
    {
        b[x]=c[i2];
        x++;
        i2++;
    }
    for(int z=p;z<=q;z++)
    c[z]=b[z-p];
}
int io(int p,int q)
{
    if(p<q)
    {
        int mij=(p+q)/2;
        io(p,mij);
        io(mij+1,q);
        tu(p,mij,q);
    }
}
int main()
{
    f=fopen("linterv.in","r");
    g=fopen("linterv.out","w");
    fscanf(f,"%d",&t);
    while(t)
    {i=0;
     i++;
     num=0;
       fscanf(f,"%d",&n);
       for(i=1;i<=n;i++)
       fscanf(f,"%lld%lld",&c[i].a,&c[i].b);
      io(1,n);
      int x=1;
       for(i=2;i<=n;i++)
        {if(i==x)
        i++;

            if(c[i].b>=c[x].b&&aux[i]==0&&c[i].a<=c[x].b)
                {
                    if(c[i].b-c[x].b<0)
                num=num-(c[i].b-c[x].b);
                else
                    num=num+c[i].b-c[x].b;
            aux[i]=1;}
            else
                if(c[i].b<=c[x].b&&c[i].a>=c[x].a)
                aux[i]=1;
                else
                    if(c[i].a>=c[x].b)
                    {x++;
                    i--;
                    }

        }
        for(i=1;i<=n;i++)
           if(aux[i]==0)
            {
                if(c[i].b-c[x].b<0)
                    num=num-(c[i].b-c[x].b);
                else
                    num=num+c[i].b-c[x].b;
            }
           fprintf(g,"%lld",num);
            for(i=1;i<=n;i++)
                {aux[i]=0;
            c[i].a=c[i].b=0;
            }
            n=0;
    t--;
    }
}


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mihai Calancea din Februarie 17, 2014, 22:45:35
Încearcă să nu mai postezi cod, fiindcă n-o să stea nimeni să înțeleagă ce vrei să faci cu el.

În general, dacă ai probleme, urmează pașii ăștia:

1. Te gândești singur.
2. Citești forumul să vezi dacă nu a mai deschis cineva aceleași discuții.
3. Postezi pe forum, dar nu surse. Vorbești despre idei, pui întrebări punctuale etc.

Și modifică-ți postările, nu mai posta consecutiv.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mercea Otniel din Februarie 18, 2014, 20:00:37
ce pot sa gresesc daca am facut exact ca in solutie, am testat toate exemplele de pe acest forum si tot i-au incorect? unde ar fi greseala ?


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mercea Otniel din Februarie 18, 2014, 20:03:06
am rezolvat.era scrierea in fisier. nu faceam end line dupa ce citeam un test


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Mihai Calancea din Februarie 18, 2014, 20:39:26
Ok, dar tocmai ți-am spus să nu mai postezi consecutiv. Și vezi că "i-au" nu e corect, se scrie "iau". Încearcă să folosești majuscule ca să fie scrisul mai lizibil.


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Cihodaru Ciprian-Alexandru din Mai 12, 2016, 16:08:39
Ma poate ajuta cineva? iau TLE
pentru pozitii folosesc doi vectori a si b in a tin limita stanga iar in b limita dreapta
sortez cei doi vectori folosind QS si apoi calculez suma! Imi puteti da o ideea cum sa optimizez? :-k


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan Pop din Mai 12, 2016, 21:40:43
Salut!Ca sa intre in timp,ai putea folosi sort-ul din STL,e rapid si mie mi-a intrat cu el.Ca sa-l folosesti,ar trebui sa faci asa

#include<algorithm>//biblioteca necesara pt sort
struct interval
{int stanga,dreapta;}v[ n ];//structura ce reprezinta un interval,care te ajuta sa sortezi capetele impreuna
bool comp(interval x,interval y)
{
    if(x.stanga==y.stanga) return x.dreapta<y.dreapta;//functia da un criteriu de sortare
    return x.stanga<y.stanga;
}
//si sortarea efectiva va fi
sort(v+1,v+n+1,comp);

Concret,fuctia compara intervalele in functie de capetele din stanga ale lor,iar daca acestea sunt egale,le compara in functie de cel din dreapta.
Exemplu:
2 3
1 2
1 3
va deveni
1 2
1 3
2 3
Ca sa accesezi un element din vector(pt citire,algoritm,etc.)
Te vei referi la el ca
v[ i ].stanga pentru un capat si v[ i ].drepata pentru celelalt
Sper ca am fost de ajutor:)


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Alexandru Valeanu din Mai 12, 2016, 23:38:04
@Bodo171 Ai o eroare in functia "comp".


Titlul: Răspuns: 126 Lungimi de interval
Scris de: Bogdan Pop din Mai 13, 2016, 10:44:49
@Bodo171 Ai o eroare in functia "comp".
Am rezolvat.Mersi de sesizare.