Sunteți pe pagina 1din 5

Cerinţa

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

Există o soluție, aceea când sare direct pe treapta 2.

Exemplul 2:
Intrare

42

Ieșire

3
Explicație

Prima: 1 -> 2 -> 3 -> 4


A doua: 1 -> 2 -> 4
A treia: 1 -> 3 -> 4

#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;
}

S-ar putea să vă placă și