Cerința
Se dau două numere naturale N
şi K
. Determinaţi numărul de şiruri de lungime N
formate doar din semnele +
şi –
şi în care nu apar K
semne –
pe poziţii consecutive.
Date de intrare
Fișierul de intrare minusk.in
conţine pe prima linie 2
numere naturale separate printr-un spaţiu, N
şi K
, cu semnificaţia din enunţ.
Date de ieșire
Fișierul de ieșire minusk.out
va conține pe prima linie un singur număr natural reprezentând valoarea cerută, modulo 2011
.
Restricții și precizări
1 ≤ K ≤ N ≤ 1000000
;- pentru
30%
dintre testeN ≤ 10
- pentru
70%
dintre testeN ≤ 1000
Exemplu
minusk.in
4 2
minusk.out
8
Explicație
Cele 8
şiruri sunt: ++++
, +++-
, ++-+
, +-++
, -+++
, +-+-
, -++-
, -+-+
. În niciunul dintre aceste şiruri nu avem două sau mai mult de două caractere –
pe poziţii consecutive.
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 MinusK:
#include <stdio.h>
#define DIM 1000002
#define MOD 2011
int P[DIM];
int M[DIM];
int N, K, T, i, aux;
int main() {
FILE *f = fopen("minusk.in","r");
fscanf(f,"%d %d",&N, &K);
fclose(f);
P[0] = 1;
P[1] = 1;
M[1] = 1;
for (i=2;i<=N;i++) {
P[i] = (P[i-1] + M[i-1]) % MOD;
if (i>=K)
aux = P[i-K];
else
aux = 0;
M[i] = (P[i-1] + M[i-1]) % MOD;
M[i] -= aux;
if (M[i]<0)
M[i]+=MOD;
}
FILE *g = fopen("minusk.out","w");
fprintf(g,"%d",(P[N] + M[N])%MOD);
fclose(g);
}
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 #730 MinusK
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #730 MinusK 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!