Afişează mesaje
Pagini: 1 2 3 [4] 5
76  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 477 Alee : Februarie 11, 2013, 16:48:25
Sursa mea ia 60 de puncte . MLE pe testul 8 si pe restul pe care nu le-a trecut Incorect.  Read This!
Nu inteleg, am tratat cazul particular cand raspunsul e 0 si tot aceeasi treaba. Multumesc anticipat  peacefingers.
Cod:
#include <fstream>
using namespace std;
ifstream cin("alee.in");
ofstream cout("alee.out");
int n, m, l[180][180], q[4][31625], i,j , starti, startj, endi, endj, u, p;
void init()
{
    int x, y;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            l[i][j]=-2;
    for(i=1;i<=m;++i)
        {
            cin>>x>>y;
            l[x][y]=-1;
        }
    cin>>starti>>startj;
    l[starti][startj]=1;
    cin>>endi>>endj;
    l[endi][endj]=-3;
    q[1][1]=starti;
    q[2][1]=startj;
}
void intr(int c, int d)
{
    u=u+1;
    q[1][u]=c;
    q[2][u]=d;
}
void extr(int &c, int &d)
{
    p=p+1;
    c=q[1][p];
    d=q[2][p];
}
void lee()
{
    int x, y;
    u=1;
    p=0;
    while(p!=u)
    {
        extr(x,y);
        if(x>1)
                if(l[x-1][y]>l[x][y]+1 || l[x-1][y]==-2 || l[x][y+1]==-3)
                    {
                        l[x-1][y]=l[x][y]+1;
                        intr(x-1, y);
                    }
        if(y>1)
                if(l[x][y-1]>l[x][y]+1 || l[x][y-1]==-2 || l[x][y+1]==-3)
                    {
                        l[x][y-1]=l[x][y]+1;
                        intr(x, y-1);
                    }
        if(y<n)
                if(l[x][y+1]>l[x][y]+1 || l[x][y+1]==-2|| l[x][y+1]==-3)
                    {
                        l[x][y+1]=l[x][y]+1;
                        intr(x, y+1);
                    }
        if(x<n)
                if(l[x+1][y]>l[x][y]+1 || l[x+1][y]==-2|| l[x+1][y]==-3)
                    {
                        l[x+1][y]=l[x][y]+1;
                        intr(x+1, y);
                    }
    }
}
void afisare()
{
  //  for(i=1;i<=n;i++)
  //  {
  //      for(j=1;j<=n;j++)
  //          cout<<l[i][j]<<" ";
  //      cout<<"\n";
  //  }
    if(l[endi][endj]==-3)
        cout<<"0\n";
    else
    cout<<l[endi][endj]<<"\n";
}
int main()
{
    init();
    lee();
    afisare();
    return 0;
}
77  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1215 Pescari : Februarie 10, 2013, 16:31:00
Cod:
#include<fstream>
#include<iostream>
using namespace std;

int a[1005][1005],i,j,ok,u,p,P,q[3][10005],c,d,y,m,sir[3][10005],maxi,l[1005][1005],n,k=0;
ifstream fin("pescari.in");
ofstream g("pescari.out");

void init()

{

     //citim datele din fisierul pescari.in
     fin>>n>>m>>P;
   //  cout<<n;
      for(i=1;i<=n;i++)
             for(j=1;j<=m;j++)
            { fin>>a[i][j];
              l[i][j]=0;
              if(a[i][j]==2) {l[i][j]=0;k++;sir[1][k]=i;sir[2][k]=j;}
            }
             fin.close();
}
//instroduc linia c si col d in coada
void intr(int c,int d)
{
     u=u+1;
      if(u>20000)
       u=1;

       q[1][u]=c;
       q[2][u]=d;
}
//extrag un element din coada
void extr(int &c,int &d)
{
     p=p+1;
     if(p>20000)
     p=1;

     c=q[1][p];
     d=q[2][p];
}

//algoritmul LEE
void lee()
{
    int x, y;
     p=0;u=0;
     p=0;
     u=k;
     while(p!=u)
    { extr(x,y);

   //vecinul de sus
   //daca are inaltime mai mare si numarul de catarari mai mic atunci
   //actualizez numarul de catarari cu l[x][y]+1
     if(x>1)

      if(a[x-1][y]==0 || a[x-1][y]==1)
       if((l[x-1][y]>l[x][y]+1||l[x-1][y]==0))
       {
                                       l[x-1][y]=l[x][y]+1;
       intr(x-1,y);

      }

     //
      if(x<n)
       if(a[x+1][y]==0 || a[x+1][y]==1)
        if(l[x+1][y]>l[x][y]+1||l[x+1][y]==0)
        {l[x+1][y]=l[x][y]+1;
         intr(x+1,y);

         }

    if(y>1)
     if(a[x][y-1]==0 || a[x][y-1]==1)
           if(l[x][y-1]>l[x][y]+1 || l[x][y-1]==0)
           {l[x][y-1]=l[x][y]+1;
                                  intr(x,y-1);

                                  }
    if(y<m)
     if(a[x][y+1]==0 || a[x][y+1]==1)
      if(l[x][y+1]>l[x][y]+1||l[x][y+1]==0)
    {l[x][y+1]=l[x][y]+1;
    intr(x,y+1);

    }
    if(y<m && x<n)
     if(a[x+1][y+1]==0 || a[x+1][y+1]==1)
      if(l[x+1][y+1]>l[x][y]+1||l[x+1][y+1]==0)
    {l[x+1][y+1]=l[x][y]+1;
    intr(x+1,y+1);}


    if(y>1 && x<n)
     if(a[x+1][y-1]==0 || a[x+1][y-1]==1)
      if(l[x+1][y-1]>l[x][y]+1||l[x+1][y-1]==0)
    {l[x+1][y-1]=l[x][y]+1;
    intr(x+1,y-1);}


    if(y<m && x>1)
     if(a[x-1][y+1]==0 || a[x-1][y+1]==1)
      if(l[x-1][y+1]>l[x][y]+1||l[x-1][y+1]==0)
    {l[x-1][y+1]=l[x][y]+1;
    intr(x-1,y+1);}


    if(y>1 && x>1)
     if(a[x-1][y-1]==0 || a[x-1][y-1]==1)
      if(l[x-1][y-1]>l[x][y]+1||l[x-1][y-1]==0)
    {l[x-1][y-1]=l[x][y]+1;
    intr(x-1,y-1);

    }

}

}
void scriere()
{

      for(i=1;i<=n;i++)
                       for(j=1;j<=m;j++)
                                        if(a[i][j]==1)
                                           g<<l[i][j]<<"\n";
}
int main()
{

    init();
    for(i=1;i<=k;i++) {
        q[1][i]=sir[1][i];
        q[2][i]=sir[2][i];
    }
    lee();
     scriere();

    return 0;
}
Sursa mea ia 50 de puncte. Pe restul testelor avand Incorect. As ramane profund indatorat daca cineva mi-ar explica unde si de ce gresesc Smile. Numai bine  peacefingers!
78  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1100 Derdelus : Februarie 08, 2013, 08:52:37
Nu am inteles ideea cu sumele partiale. Eu il fac normal, dar iau 50 puncte. Am incercat cu sumele partiale, dar nu inteleg recurenta la matricea sum. Daca ma poate ajuta cineva, i-as ramane indatorat.  Exclamation Applause
79  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2013 / Răspuns: CityLog : Ianuarie 20, 2013, 09:53:08
0 5 0
Deci asta ce inseamna ? Ca cetateanul 0 a nascut un copil cu numele 5 sau cum?
80  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2013 / Răspuns: CityLog : Ianuarie 20, 2013, 09:49:16
Numele unui copil poate fi 0 ?
81  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2013 / Răspuns: Algoritmiada 2013, Runda 2 : Ianuarie 20, 2013, 09:15:32
Da-ti bataie !   Weightlift
82  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 474 Teams : Ianuarie 05, 2013, 20:00:47
Nu, nu e aia. Am incercat si e la fel.
Cu quickSort: http://infoarena.ro/job_detail/848689
Cu sort din algorithm http://infoarena.ro/job_detail/848678
Cu parsare, care intra lejer in timp http://infoarena.ro/job_detail/848655.

In rest nu mai stiu ce sa-i fac sa mearga cu parsare bine. Mentionez ca pe exemplu merge.
83  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 474 Teams : Ianuarie 05, 2013, 18:34:47
Buna. Am incercat sa rezolv problema asta cu cautare binara. Am doua surse una care ia 90 de puncte cu TLE pe ultimul test, si una cu 0 puncte cu Incorect pe fiecare. Prima face citirea pe streamuri, iar a doua parsata. Am incercat si cu printf si scanf dar au avut acelasi rezultat ca streamurile.
Aici sunt cele doua surse
Cod:
#include<fstream>
using namespace std;
long long n, a[100001];
long long A,B,c,i,j;
void quickSort(long long arr[], long long left, long long  right) {
      long long i = left, j = right;
      long long tmp;
      long long pivot = arr[(left + right) / 2];
 
      /* partition */
      while (i <= j) {
            while (arr[i] < pivot)
                  i++;
            while (arr[j] > pivot)
                  j--;
            if (i <= j) {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  i++;
                  j--;
            }
      };
 
      /* recursion */
      if (left < j)
            quickSort(arr, left, j);
      if (i < right)
            quickSort(arr, i, right);
}
int caz1(int b, int li)
{
    int  ls=n, mij, fin;
    while( li<=ls)
    {
        mij=(li+ls)/2;
        if (a[mij]<=b)
        {
            fin=mij;
            li=mij+1;
        }
        else
            ls=mij-1;
    }
    return fin;
}
 
int caz2(int b, int li)
{
    int ls=n,mij,fin;
    while(li<=ls)
    {
    mij=(li+ls)/2;
    if (a[mij]>=b)
    {
        fin=mij;
        ls=mij-1;
    }
    else
    li=mij+1;
    }
    return fin;
}
int main()
{
    ifstream cin("teams.in");
    ofstream cout("teams.out");
    cin>>n>>A>>B;
    for(i=1;i<=n;i++)
    cin>>a[i];
    cin.close();
    quickSort(a, 1, n);
    for(i=1;i<n;i++)
       if(a[i]+a[i+1]<=B) { //cout<<a[i]<< " "<<caz1(B-a[i], i+1)-caz2(A-a[i], i+1);
     c+=caz1(B-a[i], i+1)-caz2(A-a[i], i+1)+1 ;}
    cout<<c;
    cout.close();
    return 0;
}


Cod:
#include<fstream>
#include<string.h>
using namespace std;
long long n, a[100001];
char s[100005];
long long A,B,c,i,j;
void quickSort(long long arr[], long long left, long long  right) {
      long long i = left, j = right;
      long long tmp;
      long long pivot = arr[(left + right) / 2];
 
      /* partition */
      while (i <= j) {
            while (arr[i] < pivot)
                  i++;
            while (arr[j] > pivot)
                  j--;
            if (i <= j) {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  i++;
                  j--;
            }
      };
 
      /* recursion */
      if (left < j)
            quickSort(arr, left, j);
      if (i < right)
            quickSort(arr, i, right);
}
int caz1(int b, int li)
{
    int  ls=n, mij, fin;
    while( li<=ls)
    {
        mij=(li+ls)/2;
        if (a[mij]<=b)
        {
            fin=mij;
            li=mij+1;
        }
        else
            ls=mij-1;
    }
    return fin;
}
 
int caz2(int b, int li)
{
    int ls=n,mij,fin;
    while(li<=ls)
    {
    mij=(li+ls)/2;
    if (a[mij]>=b)
    {
        fin=mij;
        ls=mij-1;
    }
    else
    li=mij+1;
    }
    return fin;
}
int main()
{
    ifstream cin("teams.in");
    ofstream cout("teams.out");
    cin>>n>>A>>B;
    char abc[100];
cin.getline(abc, 100);
    cin.getline(s,100005);
    long long x=0;
    n=0;
    long aux=0;
    long poz=0;
for (i=0;s[i];++i){
    if (s[i]==' '){
       a[++n]=aux;
       aux=0;
    }
    else
        aux=aux*10+s[i]-'0';
}
a[++n]=aux;
    //for(i=1;i<=n;i++)
    //  cout<<a[i]<<" ";
    cin.close();
    quickSort(a, 1, n);
    for(i=1;i<n;i++)
       if(a[i]+a[i+1]<=B) { //cout<<a[i]<< " "<<caz1(B-a[i], i+1)-caz2(A-a[i], i+1);
     c+=caz1(B-a[i], i+1)-caz2(A-a[i], i+1)+1 ;
  }
    cout<<c;
    cout.close();
    return 0;
}

Practic e aceeasi chestie, dar nu inteleg totusi de ce pe a doua sursa primesc incorect  Brick wall. Va rog sa ma ajutati sa inteleg ce si unde gresesc. Multumesc anticiat.
84  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 114 Muzeu : Ianuarie 03, 2013, 15:17:41
Cred ca fac asta in functia init . Nu am prea inteles ce vroiai sa zici, poti fi mai explicit te rog  Smile?
85  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 114 Muzeu : Ianuarie 03, 2013, 14:27:24
Cod:
//Problema muzeu
#include<fstream>
#include<iostream>
using namespace std;
 
int a[251][251],i,j,ok,u,p,q[3][20001],c,d,y,sir[3][100000],maxi,l[251][251],n,k=0;
ifstream fin("muzeu.in");
ofstream g("muzeu.out");
 
void init()
 
{
       
     //citim datele din fisierul muzeu.in
     fin>>n;
   //  cout<<n;
     char c;
      for(i=1;i<=n;i++)
             for(j=1;j<=n;j++)
            { fin>>c;
             if (c=='.')
             { a[i][j]=1;
              l[i][j]=-1;
              }
             else if (c=='P') {a[i][j]=10;k++;sir[1][k]=i;sir[2][k]=j;}
                                else l[i][j]=-2;
                                }
             fin.close();
         
           
}
//instroduc linia c si col d in coada
void intr(int c,int d)
{
     u=u+1;
      if(u>20000)
       u=1;
         
       q[1][u]=c;
       q[2][u]=d;
}
//extrag un element din coada
void extr(int &c,int &d)
{
     p=p+1;
     if(p>20000)
     p=1;
       
     c=q[1][p];
     d=q[2][p];
}
 
//algoritmul LEE
void lee(int x,int y)
{
     p=0;u=0;
     intr(x,y);
     while(p!=u)
    { extr(x,y);
     
   //vecinul de sus
   //daca are inaltime mai mare si numarul de catarari mai mic atunci
   //actualizez numarul de catarari cu l[x][y]+1
     if(x>1)
       
      if(a[x-1][y]==1)
       if(l[x-1][y]>l[x][y]+1||l[x-1][y]==-1)
       {l[x-1][y]=l[x][y]+1;
       intr(x-1,y);
 
      }
       
     //
      if(x<n)
       if(a[x+1][y]==1)
        if(l[x+1][y]>l[x][y]+1||l[x+1][y]==-1)
        {l[x+1][y]=l[x][y]+1;
         intr(x+1,y);
   
         }
 
    if(y>1)
     if(a[x][y-1]==1)     
           if(l[x][y-1]>l[x][y]+1||l[x][y-1]==-1)
           {l[x][y-1]=l[x][y]+1;
                                  intr(x,y-1);
         
                                  }
    if(y<n)
     if(a[x][y+1]==1)
      if(l[x][y+1]>l[x][y]+1||l[x][y+1]==-1)
    {l[x][y+1]=l[x][y]+1;
    intr(x,y+1);
   
    }
     
}
 
}
void scriere()
{
 
             
       
      for(i=1;i<=n;i++)
             {g<<"\n";
                          for(j=1;j<=n;j++)
              g<<l[i][j]<<" ";}
     maxi=-1;
    //  for(i=1;i<=n;i++)
     //  for(j=1;j<=n;j++)
       // if(l[i][j]>maxi)
       // maxi=l[i][j];
   
}
int main()
{
   
    init();
    for(i=1;i<=k;i++)
     lee(sir[1][i],sir[2][i]);
     
     scriere();
   
    return 0;
}
Ma puteti ajuta si pe mine sa vad ce gresesc aici Smile?  Sursa mea nu trece doua dintre teste cu textul Time limit exceeded. Multumesc anticipat !
86  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1164 Acces : Decembrie 19, 2012, 14:00:15
0 0 0 0 1 1 1
0 1 1 0 1 1 1
0 1 1 0 0 0 0
0 1 1 0 1 0 0
0 0 0 0 1 0 1
0-ul taiat se pune Smile?

De ce nu s-ar pune? Smile Nu e vorba sa le accesezi pe toate pe acelasi "drum",e vorba de cate sunt accesibile.

Multumesc mult Smile ! Am inteles eu gresit. 
87  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1164 Acces : Decembrie 19, 2012, 12:17:42
0 0 0 0 1 1 1
0 1 1 0 1 1 1
0 1 1 0 0 0 0
0 1 1 0 1 0 0
0 0 0 0 1 0 1
0-ul taiat se pune Smile?
88  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1164 Acces : Decembrie 15, 2012, 18:00:43
Pentru exemplu, la al treilea test nu ar trebui sa fie raspunsul 10?  Confused
89  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Traseu2 : Octombrie 26, 2012, 18:50:57
Elementele matricii sunt strict pozitive?
90  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Filme : Mai 29, 2012, 18:23:02
Intrebarea mea era cea pe care tocmai ai formulat-o , multumesc mult !
91  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Filme : Mai 29, 2012, 18:15:49
Am o intrebare, Daca el are la dispozitie T minute si suma minutelor pentru a descarca si viziona filmele este mai mica decat T, atunci se ia in considerare aceasta varianta?
Adica , de exemplu pentru
3 10
1 1
1 1
5 5
El va viziona primele doua sau numai al treilea?
92  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Cal : Aprilie 24, 2012, 19:33:33
Am inteles acum, nu stiu de ce aveam impresia ca merge numai in fata. Multumesc mult!
93  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Cal : Aprilie 24, 2012, 19:31:00
Bine, am sa incerc.
Deci sa zic ca la inceput calul este pe pozitia P(0,0) . Dupa ce sare o data va ajunge intr-un alt punct N(a, +/-b) Huh Sper ca acum ai inteles.
94  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Cal : Aprilie 24, 2012, 19:26:09
Eu nu am inteles. Adica calul nostru poate merge a pasi in sus si b pasi la dreapta sau la stanga?
95  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: ScaleCrop : Aprilie 24, 2012, 18:55:37
Am o intrebare legata de problema, este posibil ca wf=wp si hf=hp? Adica dimensiunile pozei sa coincida cu dimensiunile flyerului ?
96  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2012 / Răspuns: Ksecv2 : Aprilie 19, 2012, 09:14:47
Daca el a pus un obiect fragil( sa zic de 10) in ultima sacosa, apoi urmatorul obiect de 8 il pune in penultima sacosa si apoi urmeaza un obiect de 11 poate sa il puna iarasi in ultima sacosa sau nu se mai poate intoarce la sacosele din urma?
97  infoarena - concursuri, probleme, evaluator, articole / Infoarena Monthly 2012 / Răspuns: Diagonale : Martie 05, 2012, 19:39:41
Citat
Ati uitat-o pe Miruna.

 Applause 
98  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2012 / Răspuns: Paginatie : Februarie 26, 2012, 10:13:45
Da, mi-am dat seama pana la urma. Succes!
99  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2012 / Răspuns: Paginatie : Februarie 26, 2012, 10:10:23
In exemplul dat nu trebuie pe prima linie din fisierul de intrare puse numerele 4 si 13 ? Think
100  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2012 / Răspuns: Triplet : Ianuarie 22, 2012, 09:23:21
Numerele sunt strict distincte?
Pagini: 1 2 3 [4] 5
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines