Afişează mesaje
|
Pagini: [1] 2 3 ... 11
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema Stiva - C++
|
: Octombrie 01, 2013, 15:51:26
|
Salut, am inceput sa studiez stivele, dar nu inteleg o chestie.In carte este explicat asa:
Inserarea unui element în stivă Pentru a insera un element x în stiva S trebuie să verificăm în primul rând dacă „avem locâ€, deci dacă stiva nu este plină. Dacă stiva este plină, inserarea nu se poate face, altfel vom mări vârful stivei ÅŸi vom plasa la vârf noul element.
Iar Codul:
#define DimMax 18 //numarul maxim de elemente din stiva typedef int Stiva[DimMax]; //tipul Stiva implementat ca vector Stiva S; //stiva int vf; //varful stivei
if (vf == DimMax-1) //stiva este plina cout<<"Eroare - stiva este plina\n"; else //inseram elementul x in stiva S S[++vf] = x;
daca presupunem: x=3 si DimMax=18(Dimensiunea maxima a stivei).Nu pot intelege ce se intampla in if acolo ? if(vf==DimMax-1)..verifica daca ultimul element al stivei este egal cu DimMax-1? Nu inteleg...ma puteti ajuta?
vf = numarul de elemente din stiva, deci verifica daca stiva e plina
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 712 Albinuta
|
: Octombrie 01, 2013, 15:28:50
|
Am incercat problema Albinuta . Am o problema cu algoritmul Floyd de detectie a ciclurilor intr.un sir. am facut la fel ca pe wiki . Pe albinuta iau doar 15p. intr-adevar da incorect.pe unul din testele oficiale sirul ar fi 1 2 4 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 2 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 2 4 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 5 2 4 1 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 5 2 4 1 2 4 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 1 3 5 2 4 1 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 1 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 2 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 2 4 1 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 2 4 5 2 4 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 2 4 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 2 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 2 4 1 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 1 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 1 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 1 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 5 1 3 5 2 4 1 3 5 2 3 5 1 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 3 5 2 3 5 2 3 5 2 3 5 2 3 4 1 2 4 1 3 5 2 3
iar algoritmul meu imi returneaza miu=4 lambda=3 ceea ce este gresit...
#define F(i) i+1
void find() { tortoise = F(0); hare =F(F(0)); while (x[tortoise] != x[hare]) { tortoise = F(tortoise); hare = F(F(hare)); }
}
void find_miu() { miu=0; tortoise = 0; while (x[tortoise] != x[hare]) { tortoise = F(tortoise); hare = F(hare); miu++; }
}
void find_lambda() { lambda=1; hare = F(tortoise); while (x[tortoise] != x[hare]) { hare = F(hare); lambda++; } }
LE: ma poate ajuta cineva?  M-am uitat pe ultima ta sursa si mi se pare ca tu consideri ca sirul de raspunsuri e ciclic... ceea ce nu e adevarat, ci mai exact graful in care nodurile sunt de forma (nod_graf_initial, timp % C) unde C = cmmc(L1, L2, ..., LK) (adica cmmc-ul lungimilor listelor de adiacenta)
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: eliminare cifra de mijloc
|
: Iunie 23, 2013, 21:05:27
|
Va salut ! Se citeste un numar natural strict mai mare decat 9 avand numar impar de cifre. Sa se afiseze numarul obtinut prin eliminarea cifrei de mijloc a numarului initial. Exemplu: nr initial: 12345 nr final: 1245 Problema ruleaza pentru numere cu 3 cifre dar pentru numere cu 5,7,9 sau mai multe cifre nu ruleaza. Astept sugestii la urmatoarea problema (vezi atasament)
Uite parte din cod corectat: if(cnt%2!=0) { cnt /= 2;
z=pow(10,(cnt+1)); var1=m/z; x=pow(10,(cnt)); var2=m%x; y=var1*x+var2; cout<<"\n "<<y<<endl; }
Totusi eu as fi facut altfel: citit numarul ca string si afisat cifrele, exceptand cea din mijloc
|
|
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 010 Distincte2
|
: Septembrie 09, 2012, 20:44:54
|
P.S.: ca sa vezi daca nu cumva ai un element care deja s-a bagat, iti sugerez sa folosesti ori set (bagi elementul in set, si daca deja exista, nu mai il baga inca odata), ori sa folosesti un map (de ce? pentru ca nu are rost sa declari un vector de 1 000 000 000, cand tu ai maxim 100 000 elemente, pe care map-ul ti le pune astfel in memorie incat sa nu ai probleme). Succes  Unde vezi tu 1.000.000.000 in enuntul problemei? eu vad 1.000.000
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva Infoarena Monthly / Răspuns: 010 Distincte2
|
: Septembrie 09, 2012, 09:09:19
|
Memoria disponibila la problema distincte2 este foarte mica si programul elaborat de mine o depaseste.  Eu la sursa mea am economisit cata memorie am putut dar tot nu merge  Sursa mea este:  using namespace std; #include<stdio.h> int i,n,mm,m,v[100001],a,q,l,x,y; int main() { freopen("distincte2.in","r",stdin); freopen("distincte2.out","w",stdout); scanf("%d%d",&n,&mm); for(i=1;i<=n;i++) { scanf("%d",&a); v[a]=1; if(m<a)m=a; } for(l=1;l<=mm;l++) { q=0; scanf("%d%d",&x,&y); for(i=1;i<=m;i++) { if(v[ i ]>0) { if(i>=x&&i<=y)q++; } } printf("%d\n",q); } return 0; } Ma puteti ajuta sa o fac mai eficienta????Sa mai economisesc memorie!  Multumesc!  Tu folosesti ~400 KB memorie iar limita e de 16MB, deci iti intra sigur in memorie. Din cate vad, tu la citire faci v[a] = 1; unde 1 <= a <= 1.000.000 iar tu ai declarat vectorul de 100.000 In plus, daca vectorul v va tine doar valori 1 si 0, nu are sens sa-l declari int, pune-l char. La alt 2lea for nu trebuia sa mergi de la x la y ? In plus, nu te astepta la punctaj maxim, asta e o solutie triviala.
|
|
|
15
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 007 Arbori de intervale
|
: Iunie 13, 2012, 23:56:42
|
Intr-o sursa in care vrei sa explici ceva, nu inteleg de ce ai scrie chestii gen "p^=q^=p^=q" sau sa inlocuiesti "/2" cu ">>1". Ar trebui sa o faci cat mai clara, in stil Python. Parerea mea... Sursa, precum si siteul, le.am facut prin 2008 si nu le.am revizuit de atunci. In plus asta e ceva mai avansat de aint si consider ca cineva care a ajuns sa invete asta ar trebui sa stie operatii pe biti. Sursa unde prezint aint normal nu foloseste operatiile pe biti.
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 007 Arbori de intervale
|
: Iunie 13, 2012, 13:49:22
|
Cum pot face update sa incrementez valorile dintr-un interval [x,y] ? Daca cobor pana in frunze si updatez fiecare interval de lungime 1 presupun ca este ineficient.
Trebuie sa folosesti tehnica "lazy update/delete". In fiecare nod al arborelui trebuie sa mentii 3 valori: Full[nod] = true daca tot intervalul corespunzator nodului are aceeasi valoare, false altfel V[nod] = valoarea in cazul in care Full[nod] == true Sum[nod] = suma pe interval In plus, cand faci update, trebuie sa pasezi informatiile la fii inainte sa apelezi recursiv. Uite aici o sursa http://hickery.net/info/aint2.html
|
|
|
|