Pagini: 1 2 3 [4] 5   În jos
  Imprimă  
Ajutor Subiect: OJI 2012  (Citit de 46183 ori)
0 Utilizatori şi 2 Vizitatori pe acest subiect.
setare333
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #75 : Martie 03, 2012, 23:55:01 »

probabil ca da...
Memorat
Theory
Strain


Karma: 3
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #76 : Martie 04, 2012, 00:02:15 »

Pai nu e buna solutia aia. Solutia buna e dinamica. + numere mari (din pacate..).
Mergea si cu o formula doar ca nu cea scris mai sus..pe testele mici iti dadea corect:

Citat
int aflu()
{
    int moduri=1;
    for(int k=2;k<=n;k++)
    {
        switch(ultim)
        {
            case 1:{ultim=2;break;}
            case 2:{if(k==n)moduri*=2;else moduri*=3;ultim=2;k++;break;}
            case 3:{moduri*=2;ultim=2;break;}
        }
    }
    return moduri;
}
int main()
{
    in>>n;
    ultim=1;
        total+=2*aflu();
    ultim=2;
        total+=2*aflu();
    ultim=3;
        total+=aflu();
    out<<total;
    return 0;
}
Da intr-adevar subiectele de la a X a nu au fost prea grele ,cel putin problema asta.
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #77 : Martie 04, 2012, 00:14:24 »

Din nou. Cat ai luat cu asta?  Think
L.E: De fapt asta aduce a recurenta de la dinamica. Cred ca e ok. Dar nu e formula.
« Ultima modificare: Martie 04, 2012, 00:19:36 de către Mihai Calancea » Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #78 : Martie 04, 2012, 01:47:29 »

la problema "Culorile" se rezolva cu o formula simpla
cam asta ar fi tot programul :

#include <iostream>
#include <fstream>

using namespace std;
ifstream f("culori.in");
ofstream g("culori.out");
int main()
{
   int c=5,i,n;
   f>>n;
   for(i=3;i<n;i++)
      c=c+3
;
   g<<c*3;
   return 0;
}
regula este ca pentru 3 scanduri sunt : 3 x 3 = 9 combinatii posibile
                    pentru 4 scanduri sunt : 3 x 5 = 15 combinatii posibile
                    pentru 5 scanduri sunt : 3 x 8 = 24 combinatii posibile si etc...astept sa se posteze testele..
Pentru celelalte solutii se iese din timp foarte usor (0,2 secunde e prea putin pentru back-uri sau recursive complicate cu mii de if-uri...)

pai nu e bine. poti sa faci si pe foaie pentru 1, 2, 3 si 4.

Eu am zis sa o fac prima data prin back, dar pt N=25 stateam mult si asteptam degeaba. Dupa aia am luat toate rezulatele de la 1 la 20 din back si le-am descompus in factori primi.

Cazurile speciale erau:
1. N=1  -> g << 5
2. N=2  -> g << 8
3. N=3  -> g << 14

Restul mai trebuia sa pui o singura conditie:

Daca (N%2==0) g <<  8 * 3^(n/2-1)
Altfel g <<  14* 3^(n/2-1)
Memorat
Oancea.Catalin
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #79 : Martie 04, 2012, 09:09:24 »

Eu am facuto cu umpic de dinamica...retineai pt fiecare culare nr de garduri care se pot termina in culoare x, unul actual si unul precedent(de fiecare data il actualizai ca sa iti intre in memroie)-pt ca nu aveai nevoie decat de nr de culori de la precedenta vopsire...implementai pe numere mari si cred ca puteai sa iei 100 daca erai atent...eu am lua doar 80:(...oricum citisem undeva ca daca ai sub 50 de puncte nu te califici la clasa 5-12....si astra ar fi greu de crezut..oricum eu sunt din bucuresti si ma cam oftic Sad
Nu trebuie sa ai peste 50 de puncte pt calificare. Sunt judete unde nu s-au depasit 40 de puncte si exista elevi calificati la ONI si cu 18 puncte.  Annoyed Aici te poti uita. (Un exemplu: Teleorman - merg la ONI toti care nu au luat 0 puncte) ...seems legit
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #80 : Martie 04, 2012, 09:34:33 »

Un scop al Olimpiadei este si acela de a populariza informatica in randul elevilor din intreaga tara. Daca ai spirit competitiv, participa la Algoritmiada, .campion, topcoder, codeforces, etc. Smile
Memorat

Am zis Mr. Green
marcu.iulian13
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #81 : Martie 04, 2012, 11:48:54 »

Salut! Vreau si eu sa aflu cum e cu contestatiile... Adica se fac maine? Intre ce ore? Eu nu am fost anuntat despre contestatii in sala de concurs si vreau sa ma lamuresc. Multumesc!
Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #82 : Martie 04, 2012, 11:51:47 »

Au afisat solutiile.

Intre asta:

Cod:
#include <fstream>
using namespace std;
ifstream f("culori.in");
ofstream g("culori.out");
int a[500000], n, putere;

void prod()
{
    a[0]=1;
    a[1]=3;

    int t=0, x=0, i;

    while(putere)
    {
        for(i=1; i<=a[0]; ++i)
        {
            x=a[i]*3+t;
            a[i]=x%10;
            t=x/10;
        }
        while(t)
        {
            a[++a[0]]=t%10;
            t/=10;
        }
        putere--;
    }
}

void par1()
{
    int x=0, t=0, i;

    for(i=1; i<=a[0]; ++i)
    {
        x=a[i]*8+t;
        a[i]=x%10;
        t=x/10;
    }
    while(t)
    {
        a[++a[0]]=t%10;
        t/=10;
    }
}

void impar1()
{
    int x=0, t=0, i;

    for(i=1; i<=a[0]; ++i)
    {
        x=a[i]*2+t;
        a[i]=x%10;
        t=x/10;
    }
    while(t)
    {
        a[++a[0]]=t%10;
        t/=10;
    }
}

void impar2()
{
    int x=0, t=0, i;

    for(i=1; i<=a[0]; ++i)
    {
        x=a[i]*7+t;
        a[i]=x%10;
        t=x/10;
    }
    while(t)
    {
        a[++a[0]]=t%10;
        t/=10;
    }
}

int main()
{
    f>>n;

    if(n==1)
    {
        g<<5<<"\n";
        return 0;
    }

    if(n==2)
    {
        g<<8<<"\n";
        return 0;
    }

    if(n==3)
    {
        g<<14<<"\n";
        return 0;
    }

    putere=n/2-2;

    prod();

    if(n%2==0)
    {
        par1();
        for(int i=a[0]; i>=1; --i) g<<a[i];
    }

    else
    {
        impar1();
        impar2();
        for(int i=a[0]; i>=1; --i) g<<a[i];
    }
}

si asta :

Cod:
#include<fstream>
using namespace std;
ifstream f("culori.in");
ofstream g("culori.out");
int n,i,A[10000];
unsigned long long nr=1;
void mul(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
int main()
{f>>n;
 if(n==1)g<<5;
 else if(n==2)g<<8;
  else if(n==3)g<<14;
    else if(n%2==0)
  {A[1]=8;
   A[0]=1;
for(i=1;i<=(n-2)/2;i++)
mul(A,3);
for(i=A[0];i>=1;i--)
g<<A[i];
   }

       else if(n%2!=0)
   {A[1]=14;
   A[0]=1;
for(i=1;i<=(n-3)/2;i++)
mul(A,3);
for(i=A[0];i>=1;i--)
g<<A[i];
   }
  f.close();
  g.close();
return 0;
}

care e MAREA DIFERENTA?

Prima e sursa mea din concurs si mi-a dat MLE la toate testele.
Cealalta e solutia oficiala(una dintre multe altele).
Memorat
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #83 : Martie 04, 2012, 12:16:19 »

Pai diferenta este ca tu ai declarat asa
Cod:
int a[500000]
Chestia asta inseamna aproximativ 2 MB de memorie, iar tu aveai disponibil doar 1MB. La OJI / ONI trb sa ai foarte mare grija la memoria declarata, deoarece nu este ca pe infoarena (aici ti se pune doar memoria folosita). Si, din pacate, in cazuri ca acesta nu se poate face nimic Sad (Am avut si eu aceeasi problema la ONI anu' trecut si am pierdut vreo 70 de puncte Very Happy ).
Memorat
flaviusc11
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 26



Vezi Profilul
« Răspunde #84 : Martie 04, 2012, 13:11:37 »

Nu stiti la facultate este olimpiada si pentru studenti? Sunt in clasa a XII-a si abia am prins gustul olimpiadei. Imi pare rau ca nu m-am apucat sa lucrez intens mai devreme. Imi place foarte mult sa codez.
Memorat
psycho21r
Client obisnuit
**

Karma: -15
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #85 : Martie 04, 2012, 14:12:20 »

Citat
Cel mai scurt drum dintre două puncte în plan se obţine pe linie dreaptă. Astfel dacă eliminăm porţiunile de traversare a pistelor de biciclete, traseul lui Gigel către prietenul lui trebuie să fie un segment. Această lungime se calculează cu teorema lui Pitagora, la care se adaugă lungimile de traversare orizontală şi verticală.
Soluţia nu este unică de fiecare dată! Dacă traseul lui Gigel intersectează punctul de intâlnire a două piste de biciclete, numărul soluţiilor se dublează, fiindcă Gigel poate traversa zona în două moduri: orizontal-vertical sau vertical-orizontal. În ambele cazuri două laturi alăturate  ale aceluiaşi dreptunghi, deci ambele sunt soluţii corecte. Astfel, numărul soluţiilor distincte pentru orice teste de intrare este o putere a lui 2.
Banana

Baftă pe mai departe celor care s-au calificat, ne vedem la anul.
Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #86 : Martie 04, 2012, 16:49:36 »

Pai diferenta este ca tu ai declarat asa
Cod:
int a[500000]
Chestia asta inseamna aproximativ 2 MB de memorie, iar tu aveai disponibil doar 1MB. La OJI / ONI trb sa ai foarte mare grija la memoria declarata, deoarece nu este ca pe infoarena (aici ti se pune doar memoria folosita). Si, din pacate, in cazuri ca acesta nu se poate face nimic Sad (Am avut si eu aceeasi problema la ONI anu' trecut si am pierdut vreo 70 de puncte Very Happy ).

OK. Dar cum calculez cata memorie folosesc?

Si in plus de asta ai vazut ce punctaje sau luat, nu trebuia sa avem memorie ceva mai mare, ca la 11-12 ?
Memorat
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #87 : Martie 04, 2012, 17:05:37 »

OK. Dar cum calculez cata memorie folosesc?

Si in plus de asta ai vazut ce punctaje sau luat, nu trebuia sa avem memorie ceva mai mare, ca la 11-12 ?

In general, pentru a vedea cati MB ocupa un vector poti sa folosesti urmatoarea comanda:
Cod:
printf("%lf", 1.0 * sizeof(a) / 1024 / 1024);
unde a este vectorul pentru care vrei sa vezi ce dimensiune ocupa (orientativ) .

In legatura cu punctajele, nu stiu ce sa zic. Nu sunt in masura sa comentez limitele de memorie ale problemelor. Poate ca exact asta s-a dorit a fi cea mai mare dificultate a primei probleme (daca nu ma insel, culori era prima) : gasirea unei solutii "cat mai optime" din pdv al memoriei.
« Ultima modificare: Martie 04, 2012, 17:12:05 de către Mihai-Alexandru Dusmanu » Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #88 : Martie 04, 2012, 17:25:39 »

In legatura cu punctajele, nu stiu ce sa zic. Nu sunt in masura sa comentez limitele de memorie ale problemelor. Poate ca exact asta s-a dorit a fi cea mai mare dificultate a primei probleme (daca nu ma insel, culori era prima) : gasirea unei solutii "cat mai optime" din pdv al memoriei.

De obicei, un program optim e unul cu timp de rulare cat mai mic. De aceea au pus timp : 0.2 sec. La "Culori"(care era defapt a 2-a) au pus si o conditie suplimenatara la Restrictii "N<=45" ca sa vezi ca nu e ca raspuns "un numar format pe 15 cifre" (maxim pe categoria intregi). Daca e numar mai mare de 15 cifre inseamna ca e pe numere mari exact cum cerea si problema.

Plus de asta daca nu ma crezi poti face un back-tracking de proba (exact cum am facut eu acolo) sa vezi ca dupa N>20 problema iese din timp, iar pt N=19 solutia era formata din 6 cifre, deci pt N=5000 solutia avea ceva "cifre".


In legatura cu memoria nu au fost nici ei prea corecti. La prima prob. au dat 4MB cu 3MB pt stiva. Daca ce zici tu e adevarat inseamna ca acum eram calificat la ONI.

Memorat
visanr
Nu mai tace
*****

Karma: 168
Deconectat Deconectat

Mesaje: 213



Vezi Profilul
« Răspunde #89 : Martie 04, 2012, 17:43:20 »

La culori eu am facut un back care mergea in 0.198 sec pt n=28, mai mult nu mai mergea si am luat doar 10 pct. Thumb down
« Ultima modificare: Martie 04, 2012, 18:01:35 de către Visan Radu » Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #90 : Martie 04, 2012, 19:06:50 »

La culori eu am facut un back care mergea in 0.198 sec pt n=28, mai mult nu mai mergea si am luat doar 10 pct. Thumb down

Tu ai folosit codeblocks?

Eu am avut un rapan de calculator si la tastatura numerica semnul " / " era defapt semnul " * ", si invers.
Memorat
visanr
Nu mai tace
*****

Karma: 168
Deconectat Deconectat

Mesaje: 213



Vezi Profilul
« Răspunde #91 : Martie 04, 2012, 19:10:28 »

MinGW am folosit. Eu am avut singurul monitor din ala mare din toata sala, palpaia imaginea, tastatura tot trecea in romana. Pe langa astea, au facut olimpiada in 3 scoli ca nu aveau destule calculatoare.
Memorat
alexalbu95
Client obisnuit
**

Karma: -10
Deconectat Deconectat

Mesaje: 57



Vezi Profilul
« Răspunde #92 : Martie 04, 2012, 20:18:42 »

MinGW am folosit. Eu am avut singurul monitor din ala mare din toata sala, palpaia imaginea, tastatura tot trecea in romana. Pe langa astea, au facut olimpiada in 3 scoli ca nu aveau destule calculatoare.

Dar atunci cum ai aflat timpul de executie? Pe minGW 2.05 dupa ce se termina rularea programului iti scrie 2 randuri , iar pe unu din ele "return 0"(sau o val pe care o scrii tu dupa return). In schimb pe codeblocks, pe pagina compilatorului iti afiseaza si timpul de executie cu  mii-mi in coada.
Memorat
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #93 : Martie 04, 2012, 20:31:29 »

Dar atunci cum ai aflat timpul de executie? Pe minGW 2.05 dupa ce se termina rularea programului iti scrie 2 randuri , iar pe unu din ele "return 0"(sau o val pe care o scrii tu dupa return). In schimb pe codeblocks, pe pagina compilatorului iti afiseaza si timpul de executie cu  mii-mi in coada.

O solutie ar fi asta:
Cod:
#include <ctime>

...

int main() {
    clock_t t1, t2;

    t1 = clock();

    //program

    t2 = clock();

    double diff = 1.0 * t2 - 1.0 * t1;

    printf("%lf", diff / CLOCKS_PER_SEC);

    return 0;
}
Memorat
visanr
Nu mai tace
*****

Karma: 168
Deconectat Deconectat

Mesaje: 213



Vezi Profilul
« Răspunde #94 : Martie 04, 2012, 21:21:49 »

Pai <ctime>, 2 variabile double, start si stop, unde vrei sa inceapa sa contorizeze start=clock(), unde sa se opreasca stop=clock si apoi printf("%lf", (stop-start)/CLOCKS_PER_SEC).



LE:seamana cu ce a scris Mihai mai sus
Memorat
dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #95 : Martie 04, 2012, 22:08:18 »

Foarte inspirat autorul de la problema 'parc' (Sa copieze o problema dintr-o carte prafuita de mate si s-o propuna la OJI, in loc sa propuna un graf, un arbore, UN CEVA sa puteti departaja concurentii corect ... Nu-i de mirare ca au fost multe surprize ... neplacute din pacate
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #96 : Martie 04, 2012, 22:20:55 »

Foarte inspirat autorul de la problema 'parc' (Sa copieze o problema dintr-o carte prafuita de mate si s-o propuna la OJI, in loc sa propuna un graf, un arbore, UN CEVA sa puteti departaja concurentii corect ... Nu-i de mirare ca au fost multe surprize ... neplacute din pacate
De unde a copiat-o ?

Departajarea chiar ca a fost proasta.
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #97 : Martie 04, 2012, 23:16:57 »

Dornescule am citit problema parc si pare foarte ok. Ca are o sursa sau alta de inspiratie nu schimba faptul ca e o problema draguta.

Ce legatura are asta cu suprizele tale?
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #98 : Martie 04, 2012, 23:21:50 »

Dornescule am citit problema parc si pare foarte ok. Ca are o sursa sau alta de inspiratie nu schimba faptul ca e o problema draguta.

Ce legatura are asta cu suprizele tale?

Problema e ok, si mi s-ar fi parut misto sa apara la un SRM/runda de Codeforces. Dar la judeteana, intr-un asemenea set, mi se pare ca face o departajare proasta. Si asta e destul de evident pentru toata lumea..
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #99 : Martie 04, 2012, 23:27:28 »

Vad scoruri foarte variate la ambele probleme la 11-12. Ai doua probleme pe care poti departaja, ambele cu ceva punctaje intermediare. Problemele nu au fost super dure. Au avut subpuncte pe care puteai lua puncte chiar daca nu le faceai pe amandoua. Nu stiu ce vreti mai mult de atat.

Tot timpu se poate mai bine da hai sa nu avem pretentii sa se lucreze la problemele de OJI cate un an inainte de concurs ca sa fie balansate perfect.
Memorat
Pagini: 1 2 3 [4] 5   În sus
  Imprimă  
 
Schimbă forumul:  

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