Informatică, întrebare adresată de tswsytesnet, 8 ani în urmă

O planşă de formă dreptunghiulară este împărţită în n rânduri egale şi pe fiecare rând în m casete egale. În
fiecare casetă este scris un număr natural nenul cu maxim 5 cifre.
Pe marginea planşei, în dreptul primului rând, de o parte şi de alta, sunt aşezaţi doi roboţi, A şi B. A se
deplasează începând de la prima casetă, spre dreapta, iar B se deplasează de la ultima casetă, spre stânga,
respectând următoarele reguli:
- o deplasare presupune ca un robot să culeagă toate numerele aflate pe rândul curent, până la întâlnirea
primului număr prim, în direcţia în care se deplasează robotul respectiv;
- dacă pe un rând numărul de numere prime este impar atunci A va efectua deplasarea, iar B nu va face
nimic;
- dacă pe un rând numărul de numere prime este par nenul atunci B va efectua deplasarea, iar A nu va face
nimic;
- dacă pe un rând nu se găsesc numere prime atunci nici un robot nu face nimic;
- după testarea unui rând ambii roboţi trec pe poziţiile iniţiale de la capetele rândului următor;
- se vor testa astfel toate rândurile planşei.
Cerinţă
Cunoscând dimensiunea planşei şi valorile scrise în casete să se determine pentru fiecare robot câte deplasări
efectuat şi suma numerelor culese.
Date de intrare
Fişierul robab.in are următoarea structură:
- pe prima linie două numere naturale n şi m, reprezentând dimensiunile planşei;
- pe următoarele n linii câte m numere naturale nenule, separate prin spaţiu, reprezentând valorile scrise în
casete.
Date de ieşire
Fişierul robab.out are următoarea structură:
- pe prima linie numărul de deplasări efectuate de robotul A şi suma numerelor culese de acesta, separate
printr-un spaţiu;
- pe a doua linie numărul de deplasări efectuate de robotul B şi suma numerelor culese de acesta, separate
printr-un spaţiu.
Restricţii şi precizări:
- 2 <= n,m <= 400;
- se consideră că un robot a efectuat o deplasare atunci când a plecat din poziţia sa iniţială şi a cules
numere pe rândul curent.


Timp maxim de execuţie: 0.2 secunde/test
Memorie totală disponibilă: 2 MB din care 2 MB pentru stivă
Dimensiunea maximă a sursei: 5 Kb
1


boiustef: de înţeles că un careva robot nu culege tot rândul, ci până la primul prim ?

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("robab.in");

ofstream g("robab.out");

long long a[401][401], n,m,i,j,sA,dA,sB,dB,nrprime;

int p[401], deplasare;

bool prim(long long x)

{

   if (x<2) return false;

   if (x==2) return true;

   if (x%2==0) return false;

   for (long long d=3; d*d<=x; d+=2)

       if (x%d==0) return false;

   return true;

}

int main()

{

   f >> n >> m;

   for (i=1; i<=n; ++i)

   {

       for (j=1; j<=m; ++j)

       {

           f >> a[i][j];

           if (prim(a[i][j])) ++p[i];

       }

   }

   for (i=1; i<=n; ++i)

       g << p[i] << " ";

   g << "\n";

   for (i=1; i<=n; ++i)

   {

       if (p[i]%2==1)

       {

          deplasare=0;

          for (j=1; j<=m; ++j)

          {

              if (!prim(a[i][j]))

              {

                  deplasare=1;

                  sA+=a[i][j];

              }

              else break;

          }

          if (deplasare) ++dA;

       }

       else

       {

           if (p[i]>0)

           {

               deplasare=0;

               for (j=m; j>0; --j)

               {

                   if (!prim(a[i][j]))

                   {

                       deplasare=1;

                       sB+=a[i][j];

                   }

                   else break;

               }

               if (deplasare) ++dB;

           }

       }

   }

   g << dA << " " << sA << "\n";

   g << dB << " " << sB;

}

Explicație:

dacă rulezi codul undeva ne dai de ştire ce rezultat obţii...

Alte întrebări interesante