Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 083 Evantai  (Citit de 8222 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« : Iulie 12, 2005, 13:44:10 »

Aici puteţi discuta despre problema Evantai.
Memorat
VladS
Vizitator
« Răspunde #1 : Iulie 15, 2005, 21:02:37 »

Am trimis mai multe solutii si nu iau mai mult de 15 puncte cu solutia in N^4. Imi poate spune cineva care e greseala in secventa urmatoare.
Cod:
for (i=n-1;i;--i)
for (j=i+1;j<=n;++j)
{
mat[i][j]=1;
for (k=i+1;k<j;++k)
for (l=k+1;l<j;++l)
if (v[k] + v[l] < v[i] + v[j])
mat[i][j] += mat[k][l];
total+=mat[i][j];
}
Memorat
vladut.forum
Vizitator
« Răspunde #2 : Iulie 16, 2005, 12:47:10 »

wow, N^4, nici o sansa pt 100 de puncte...Wink
Memorat
VladS
Vizitator
« Răspunde #3 : Iulie 16, 2005, 13:56:04 »

Gata, am gasit. Uitam sa fac modulo 30103  Embarassed
Memorat
Dorin
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 73



Vezi Profilul
« Răspunde #4 : August 04, 2005, 22:58:23 »

Citat
Un evantai este un şir cu un număr par de termeni, E1 E2 ... E2K, cu următoarea proprietate:

E1 + E2K > E2 + E2K-1 > ...  > EK + EK+1


in exemplu spune ca sunt 7 nu??
deci o sa fie subsir evantai elementul de pe poz 1 cu elementul de pe poz 2
adica k =  1  E1 = 1 , E2k = 2
E1 + E2k >= E2 + E2k-1 deci nu e strict mai mare

unde e problema in enunt sau gandesc eu gresit exemplul???[/i]
Memorat

Smile ! Smile ... tomorow will be worse
Dorin
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 73



Vezi Profilul
« Răspunde #5 : August 04, 2005, 23:27:41 »

sin in exemplul
Cod:

evantai.in
6
1
2
3
4
5
6

cate subsiruri vor fi evantai Huh23Huh
Memorat

Smile ! Smile ... tomorow will be worse
vladut.forum
Vizitator
« Răspunde #6 : August 05, 2005, 07:44:01 »

de ce nu iei codul de mai sus, chiar daca e ineficent pt exemplu asta merge
Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #7 : August 05, 2005, 10:56:00 »

Citat
cate subsiruri vor fi evantai ???23???


Nici nu pot fi 23 de subsiruri de lungime para pentru un sir de 4 elemente!!! Numarul de subsiruri de lungime para este 7:
- 6 de lungime 2 (combinari de 4 luate cate 2)
- 1 de lungime 4 (sirul insusi)

Toate 7 sunt evantai.

Exemplu era facut sa va spuna ca se numara si subsirurile de lungime 2.

Silviu Ganceanu
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #8 : August 05, 2005, 10:56:52 »

TYTUS, tu chiar ai luat 100 cu N^4 ?

Silviu
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
Dorin
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 73



Vezi Profilul
« Răspunde #9 : August 05, 2005, 12:52:40 »

Citat
Numarul de subsiruri de lungime para este 7:

eu am intrebat pentru exemplul ce l-am dat eu cate sunt nu pentru exemplul din problema
adica
Cod:

evantai.in
6
1
2
3
4
5
6

dar o sa fac oricum cum a zis vladut poate iasa raspunsul  Neutral
Memorat

Smile ! Smile ... tomorow will be worse
vladut.forum
Vizitator
« Răspunde #10 : August 05, 2005, 16:07:28 »

silviu doar ti-a explicat ceva. aduti aminte ce-ai spus mai sus...
Citat

unde e problema in enunt sau gandesc eu gresit exemplul???[/i]


 Shhh
Memorat
Dorin
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 73



Vezi Profilul
« Răspunde #11 : August 05, 2005, 16:15:27 »

da mi-am dat seama numa ca dupa ce am trimis mesajul ms oricum
am aflat pana la urma care erea problema
Memorat

Smile ! Smile ... tomorow will be worse
VladS
Vizitator
« Răspunde #12 : August 06, 2005, 15:21:05 »

Pt Silviu: nu, codul il foloseam ca verificator pentru solutia cu AIB.
Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #13 : August 08, 2005, 19:46:57 »

Okay.. m-am linistit Smile
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #14 : Februarie 09, 2006, 16:26:30 »

Iau TLE pe 7 teste. Am folosit o idee aflata de la Cosmin Negruseri: am luat toate perechile si le-am sortat in functie de suma lor ( sortare liniara, un fel de radixsort ). Si dupa aia aflam sumele unor submatrici din AIBul meu si actualizam. Am actualizat AIBul cam asa ( cea mai rapida implementare pe care o cunosc ):
Cod:
void query(int x, int y)
{
int p1 = 1, p2 = 1, sy;

while (x > 0)
{
sy = y; p2 = 1;
while (sy > 0)
{
S = (S + A[x][sy]) % MOD;
while ((p2 & sy) == 0) p2 <<= 1;
sy -= p2;
p2 <<= 1;
}

while ((p1 & x) == 0) p1 <<= 1;
x -= p1;
p1 <<= 1;
}

}


Pentru a afla suma pe o portiune dreptunghiulara scad si adun niste submatrici cu coltul in (1,1) (4 matrici).

Ce pot sa fac sa scap de TLE?  Brick wall  Brick wall

P.S: Complexitatea mea e O(N^2 log^2 N).
Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #15 : Februarie 09, 2006, 17:04:49 »

Chiar Cosmine.. tu cum faceai problema asta, ca niciodata nu te-am ascultat pana la capat Smile

Filip, daca vrei iti spun cum o faceam eu.. Mi-aduc aminte ca nu-mi trebuia query decat pentru dreptunghiuri cu coltul in (0,0) (am vazut ca pomeneai ceva de adunat si scazut de prin colturi, nu prea m-am uitat pe codul tau).

Iar AIB-ul tau cred ca e comparabil cu ce faceam eu in solutia oficiala. Totusi, incearca sa compari versiunea ta cu versiunea cu LSB(x) (o gasesti prin surse oficiale, daca nu zi-mi si ti-o trimit prin email) pe niste teste mari (chiar sunt curios ce iese).

Have fun,

Silviu
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
gogu
Client obisnuit
**

Karma: 42
Deconectat Deconectat

Mesaje: 98



Vezi Profilul
« Răspunde #16 : Februarie 09, 2006, 17:36:45 »

filipb, un sfat: renunta le operatia %.
Instructiunea
Cod:
S = (S + A[x][sy]) % MOD; 

poti sa o inlocuiesti cu
Cod:
S += A[x][sy];
if (S>=MOD) S-= MOD;

Face minuni la timpul de executie. De asemenea, cred ca ar trebui sa te folosesti de formula ca sa aflii cel mai nesemnificativ bit de 1 in O(1).
Memorat
u-92
Vizitator
« Răspunde #17 : Februarie 09, 2006, 17:45:06 »

o implementare mai rapida la aib cred ca ar fi asta
Cod:
int query(int x, int y)
{
     int r = y, val = 0;
     for(; x > 0; x -= (x^(x-1))&x)
      for(y = r; y > 0; y -= (y^(y-1))&y)
         val += A[x][y];
     return val;
}

si ideea e ca iti trebuie elementele mai mici ca x de pe pozitii intre y1 si  y2,
deci A
  • [y2] (deoarece pe pozitiile mai mici ca y1 nu ai updatat nimic)
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #18 : Februarie 09, 2006, 23:24:12 »

Pai eu luam toate perechile de indici i,j si sortam a + a[j]. Dupaia lucram cu punctele (i, j) cu suma a+a[j] luate in ordine dupa suma lor. Acuma ma interesa cate subsiruri incep cu i1 se termina cu j1 si au suma a[i1] + a[j1] au suma mai mica (adica puncte (i1, j1) care le-am inserat deja in structura) cu proprietatea ca i < i1 < j1 < j. Ca sa fac chestia asta bagam un range query pe arborele de intervale si un update dupaia ca sa inserez punctul. Asa scapam de restrictia asupra valorilor elementelor sirului pt ca ne intereseaza doar ordinea sumelor nu si valoarea lor.

Edit: Se pare ca solutia mea e ca si a lui filip
Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #19 : Februarie 10, 2006, 02:03:26 »

Marfa gandit. Ai folosit arbori de intervale sau AIB-uri ?

Query-ul tau e tot intr-o structura 2D, corect ? (e un query cu varfuri in [0,0] si [i, j])

Silviu
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #20 : Februarie 11, 2006, 12:41:46 »

10x all de sfaturi Applause Aveam TLE de la chestia cu % ( Confused )...
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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