În arhipelagul X
(reprezentat sub forma unei matrici binare cu m
linii și n
coloane, acesta având m*n
zone acoperite de apă (codificate prin 0
) sau uscat (codificate prin 1
)), ajunge un peşte de aur. După drumul obositor parcurs de peşte, el vrea să se relaxeze într-o anumită zonă din acest arhipelag (cu coordonatele x2
, y2
). Totodată, acest peşte este curios să afle câte modalităţi sunt ca să ajungă acolo.
Cerința
Ştiind că peştele porneşte din coordonatele x1
, y1
, să se determine:
1) Lungimea celui mai rapid drum până în zona preferată de peşte.
2) Numărul de modalităţi eficiente de a ajunge la coordonatele x2
, y2
modulo 10007
.
Date de intrare
In fişierul de intrare pestelee.in
se vor citi:
Pe prima linie: m
şi n
(dimensiunile arhipelagului)
Pe următoarele m
linii: n
numere binare (adică 0
sau 1
).
Pe penultima linie: x1
, y1
, x2
, y2
.
Pe ultima linie: c
, semnificând numărul cerinţei.
Date de ieșire
În fişierul de ieşire pestelee.out
se va afișa răspunsul la cerința c
.
Restricții și precizări
1 ≤ x1, x2 ≤ m ≤ 500
1 ≤ y1, y2 ≤ n ≤ 500
1 ≤ c ≤ 2
- Peştele va putea merge doar în
4
direcţii (Nord, Est, Sud, Vest). De asemenea, acesta nu poate părăsi arhipelagul sau să se deplaseze pe uscat. - Zona de început, respectiv cea de sfârşit vor fi acoperite de apă.
- Dacă peştele nu va putea ajunge în zona preferată, se va afişa
0
. - Pentru 67 de puncte,
c=2
. - Pentru 10 puncte sunt exemplele.
Exemplul 1:
pestelee.in
5 5 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 2 2 3 3 1
pestelee.out
7
Exemplul 2:
pestelee.in
5 5 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 2 2 4 3 2
pestelee.out
2
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema pestelee:
///Ispir Alexandru - 100p
#include <fstream>
#define DIM 500
using namespace std;
ifstream fin("pestelee.in");
ofstream fout("pestelee.out");
int m,n,x1,y1,x2,y2,c;
int a[DIM+5][DIM+5];
long long int b[DIM+5][DIM+5];
struct coada
{
int x,y;
}C[DIM*DIM+5];
void bordare()
{
for(int i=0;i<=m+1;i++)
a[i][0]=a[i][n+1]=-1;
for(int j=0;j<=n+1;j++)
a[0][j]=a[m+1][j]=-1;
return;
}
void lee()
{
int i,lim=1;
C[lim].x=x1;
C[lim].y=y1;
a[C[lim].x][C[lim].y]=1;
b[C[lim].x][C[lim].y]=1;
for(i=1;i<=lim && (C[i].x!=x2 || C[i].y!=y2);i++)
{
if(a[C[i].x+1][C[i].y]==0)
{
C[++lim].x=C[i].x+1,C[lim].y=C[i].y;
a[C[i].x+1][C[i].y]=a[C[i].x][C[i].y]+1;
b[C[i].x+1][C[i].y]=b[C[i].x+2][C[i].y]+b[C[i].x+1][C[i].y+1]+b[C[i].x+1][C[i].y-1]+b[C[i].x][C[i].y];
b[C[i].x+1][C[i].y]%=10007;
}
if(a[C[i].x][C[i].y+1]==0)
{
C[++lim].x=C[i].x,C[lim].y=C[i].y+1;
a[C[i].x][C[i].y+1]=a[C[i].x][C[i].y]+1;
b[C[i].x][C[i].y+1]=b[C[i].x+1][C[i].y+1]+b[C[i].x-1][C[i].y+1]+b[C[i].x][C[i].y]+b[C[i].x][C[i].y+2];
b[C[i].x][C[i].y+1]%=10007;
}
if(a[C[i].x-1][C[i].y]==0)
{
C[++lim].x=C[i].x-1,C[lim].y=C[i].y;
a[C[i].x-1][C[i].y]=a[C[i].x][C[i].y]+1;
b[C[i].x-1][C[i].y]=b[C[i].x-2][C[i].y]+b[C[i].x][C[i].y]+b[C[i].x-1][C[i].y-1]+b[C[i].x-1][C[i].y+1];
b[C[i].x-1][C[i].y]%=10007;
}
if(a[C[i].x][C[i].y-1]==0)
{
C[++lim].x=C[i].x,C[lim].y=C[i].y-1;
a[C[i].x][C[i].y-1]=a[C[i].x][C[i].y]+1;
b[C[i].x][C[i].y-1]=b[C[i].x+1][C[i].y-1]+b[C[i].x-1][C[i].y-1]+b[C[i].x][C[i].y-2]+b[C[i].x][C[i].y];
b[C[i].x][C[i].y-1]%=10007;
}
}
if(a[x2][y2]==0)
fout<<"0";
else
if(c==1)
fout<<a[x2][y2];
else
fout<<b[x2][y2]%10007;
return;
}
int main()
{
fin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
fin>>a[i][j];
if(a[i][j]==1)
a[i][j]=-1;
}
}
fin>>x1>>y1>>x2>>y2;
fin>>c;
bordare();
lee();
///for(int i=1;i<=m;i++)
///{
///for(int j=1;j<=n;j++)
///{
///fout<<a[i][j]<<" ";
///}
///fout<<"\n";
///}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #3346 pestelee
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3346 pestelee de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!