Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 979 NrDivUnique  (Citit de 1636 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Martie 14, 2010, 14:39:10 »

Aici puteţi discuta despre problema NrDivUnique.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #1 : Martie 14, 2010, 15:47:31 »

hint rezolvare 100 ?  Ok complexitate mai mica decat O ( a ) ?
« Ultima modificare: Martie 14, 2010, 15:53:07 de către Dornescu Vlad-Eugen » Memorat
malilevi1
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #2 : Martie 14, 2010, 17:02:52 »

dupa parerea mea problemele sunt cam grele  Cry  Read This!
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #3 : Martie 14, 2010, 17:04:50 »

Uite rezolvarea mea:
Am observat ca daca b>=2*a, fiecare numar de la 1 la b sigur e divizor al intervalului. Asta e usor de demonstrat cu principiul cutiei.
Daca b<=2*a trebuie sa cautam care numere mai mici ca a nu divid nici un numar din [a,b]
Observam ca aceste numere sunt cele astfel incat [(a-1)/x]=[b/x], pentru ca nu va mai aparea nici un multiplu de-al sau in intervalul [a,b]
Asa ca putem face un for de la 1 la sqrt(b) sa eleminam numerele de la 1 la b care respecta aceasta chestie si observam cateva cazuri:

I Daca [(a-1)/i]=[b/i] eliminam 1 de la rezultat(adica pe i)
II Fie
x=[(a-1)/i]
y=[b/i]
u=[(a-1)/(i+1)]
v=[b/(i+1)]

Toate numerele mai mari ca v dau cel mult i in raportul [b/k] (k>=v)
Toate numerele mai mici sau egal cu x dau cel putin i in raportul [(a-1)/i] (k<=x)
Deci toate numerele k apartinand lui (v;x] au proprietatea [(a-1)/k]=[b/k]

Deci nu trebuie decat sa scadem din rezultatul curent cate numere sunt in intervalul (v;x] (atentie v deschis)
Si inca o precizare. Deoarece vom merge la sqrt(b) trebuie ca la orice moment sa nu scadem vreun interval care sa contine vreuna din elementele <=sqrt(b). Deci v=max(sqrt(b),[b/(i+1)]
Si inca ceva:vezi sa nu scazi elementele unui interval daca el nu are sens(adica v>=x)

Presupun ca asta e si rezolvarea oficiala.

P.S:Problema asta e foarta usoara, insa la intensitate avand in vedere ca maximul a fost 30 trebuie sa recunosc ca a fost cam grea

L.E: Ambele cazuri trebuie luate in considerare(in paralel). Deci daca primul caz se adevereste asta nu inseamna ca nu mai trebuie sa consideram si al doilea sau invers.Very Happy
« Ultima modificare: Martie 14, 2010, 19:51:25 de către Budau Adrian » Memorat
tzipleatud
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« Răspunde #4 : Aprilie 17, 2013, 17:28:05 »

Salut!

Cred ca ar trebui marita putin limita la aceasta problema, deoarece am o solutie in O(N*sqrt(B)) (cand B<=10^6) si nu reusesc sa trec de 80 de puncte. Totodata, am observat ca sursele ce au luat 100 recent sunt chiar la limita (48 ms pe testul maxim). Multumesc anticipat! Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines