Documente Academic
Documente Profesional
Documente Cultură
PD Pbinfo
PD Pbinfo
Se consideră o clădire de formă dreptunghiulară formată din n*m camere, dispuse pe n linii
și m coloane. Intrarea în clădire este în camera de coordonate (1,1), iar ieșirea în camera de
coordonate (n,m). Din orice cameră (i,j) se poate ajunge numai în camerele (i+1,j) sau (i,j+1).
Determinați în câte moduri se poate ajunge din camera (1,1) în camera (n,m). Deoarece
numărul de posibilități poate fi foarte mare, se cere doar restul acestui număr la împărțirea
cu 9901.
Date de intrare
Fişierul de intrare cladire.in conţine pe prima linie numerele n m.
Date de ieşire
Fişierul de ieşire cladire.out va conţine pe prima linie numărul P, reprezentând în câte
moduri se poate ajunge din camera (1,1) în camera (n,m), număr afișat modulo 9901.
Restricţii şi precizări
1 ≤ n , m ≤ 1000
Exemplu
cladire.in
33
cladire.out
#include <iostream>
#include <fstream>
using namespace std;
int n, m, D[1001][1001];
void Citire ()
{
ifstream fin ("cladire.in");
fin >> n >> m;
}
void Rezolvare()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(i==1|| j==1) D[i][j]=1;
else D[i][j]=(D[i][j-1]% 9901+D[i-1][j]% 9901)% 9901;
}
void Afisare ()
{ ofstream fout ("cladire.out");
fout << D[n][m]% 9901 << "\n";
}
int main(){
Citire ();
Rezolvare();
Afisare ();
return 0;
}
Cerinţa
Se consideră o clădire de formă dreptunghiulară formată din n*m camere, dispuse pe n linii
și m coloane. Unele camere sunt închise, accesul în ele fiind imposibil. Intrarea în clădire este
în camera de coordonate (1,1), iar ieșirea în camera de coordonate (n,m). Din orice
cameră (i,j) se poate ajunge numai în camerele (i+1,j)sau (i,j+1), dacă aceasta nu este închisă.
Determinați în câte moduri se poate ajunge din camera (1,1) în camera (n,m). Deoarece
numărul de posibilități poate fi foarte mare, se cere doar restul acestui număr la împărțirea
cu 9901.
Date de intrare
Fişierul de intrare cladire1.in conţine pe prima linie numerele n m. Linia 2 conține k, numărul
de camere închise. Următoarele k linii conțin câte 2 numere i j, reprezentând coordonatele
(linie, coloană) camerelor închise.
Date de ieşire
Fişierul de ieşire cladire1.out va conţine pe prima linie numărul P, reprezentând în câte
moduri se poate ajunge din camera (1,1) în camera (n,m), număr afișat modulo 9901.
Restricţii şi precizări
1 ≤ n , m ≤ 1000
1 ≤ k ≤ 1000
1 ≤ i ≤ n, 1 ≤ j ≤ m
camera de intrare și cea de ieșire nu sunt închise
Exemplu
cladire1.in
33
2
12
31
cladire1.out
Explicație
#include <iostream>
#include <fstream>
#define oo 1000000000
using namespace std;
int n, m, D[1001][1001];
void Citire ()
{ int k,x,y;
ifstream fin ("cladire1.in");
fin >> n >> m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
D[i][j]=1;
for(int i=1;i<=k;i++)
{
fin >> x>>y;
D[x][y]=0;
if (x==1)
for(int j=y+1;j<=m;j++)
D[x][j]=0;
if (y==1)
for(int j=x+1;j<=n;j++)
D[j][y]=0;
}
fin.close();
}
void Rezolvare()
{
for(int i=2;i<=n;i++)
for(int j=2;j<=m;j++)
if (D[i][j]!=0)
D[i][j]=(D[i][j-1]% 9901+D[i-1][j]% 9901)% 9901;
}
void Afisare ()
{ ofstream fout ("cladire1.out");
fout << D[n][m]% 9901 << "\n";
}
int main(){
Citire ();
Rezolvare();
Afisare ();
return 0;
}
Cerința
O persoana are de urcat n trepte. Ştiind că de pe treapta i poate trece pe treapta i + 1, i + 2,
..., i + (k - 1) sau i + k, aflaţi în câte moduri poate urca cele n trepte. (inițial este pe treapta 1)
Date de intrare
Programul citește de la tastatură numerele n și k.
Date de ieșire
Programul va afișa pe ecran numărul c, reprezentând numărul de moduri în care poate urca
cele n trepte.
Restricții și precizări
1 < n ≤ 100.000
1≤k≤n-1
deoarece numărul va fi prea mare sa va afișa modulo 9001.
Exemplul 1:
Intrare
22
Ieșire
Explicație
Exemplul 2:
Intrare
42
Ieșire
3
Explicație
#include <iostream>
#include <fstream>
using namespace std;
int nr[100002], n, k;
int main()
{
cin>>n>>k;
nr[0]=1; nr[1]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=k&&j<i;j++)
{
nr[i]+=nr[i-j];
if (nr[i]>9001) nr[i]-=9001;
}
cout<<nr[n];
return 0;
}