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

Am nevoie de ajutor la aceasta problema.Multumesc!
Se citesc doua numere naturale N si K si un sir v de N numere naturale. Sa se raspunda la urmatoarea intrebare:
Cate subsiruri ale sirului initial au suma elementelor egala cu K?
Afisati raspunsul acestei intrebari modulo 999979.
Date de intrare
Fişierul de intrare rucsac.in contine pe prima linie doua numere naturale N si K. Pe cea de-a doua linie se gasesc N numere naturale, reprezentand elementele sirului.
Date de ieşire
În fişierul de ieşire rucsac.out se va gasi pe prima linie un singur numar natural, reprezentand numarul total de subsiruri care au suma elementelor egala cu K.
Restricţii
1 ≤ N ≤ 500
1 ≤ v[i] ≤ 500
1 ≤ K ≤ 250.000

Răspunsuri la întrebare

Răspuns de ploPLO123
2

Răspuns:

Explica#include <stdio.h>

#include <stdlib.h>

#define NMAX 500

#define GMAX 250000

#define MOD 999979

int v[NMAX + 1];

int pret[GMAX + 1];

int main() {

   FILE *fin = fopen( "rucsac.in", "r" ), *fout = fopen( "rucsac.out", "w" );

   int n, i, G, j;

   fscanf( fin, "%d%d", &n, &G );

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

       fscanf( fin, "%d", &v[i] );

   }

   pret[0] = 1;

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

       for ( j = G; j >= v[i]; j -- ) {

           pret[j] += pret[j - v[i]];

           if ( pret[j] >= MOD )

               pret[j] -= MOD;

       }

   }

   fprintf( fout, "%d", pret[G] );

   fclose( fin );

   fclose( fout );

   return 0;

}ție:


Levi20: Apropo de varianta mea.. e buna?? Nu am gasit o pe pbinfo si nu pot s-o verific
ploPLO123: Mare programere. cu break, vectori declarati in main, fara indentare
Levi20: Nu ca as stii neaparat mai mult de atat dar programul pe care il vezi l-am facut pe o aplicatie pe telefon..
Levi20: Mi se pare mie s-au ai luat "gluma" mea nevinovata prea in serios
Levi20: Te admir de asta oti cer parerea
Levi20: Si acum eu ce sa fac, daca tot ai pus problema, daca atat am fost invatat in liceu
Levi20: :)
Răspuns de Levi20
1

Răspuns:

Hopaaa

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("rucsac.in");

ofstream g("rucsac.out");

int main()

{

int N,K,v[501],nr=0;

f>>N>>K;

for(int i=1;i<=N;i++)

f>>v[i];

for(int i=1;i<=N;i++)

{

int s=v[i];

if(s==K)

nr++;

else

for(int j=i+1;j<=N;j++)

{

s+=v[j];

if(s==K)

{

nr++;

break;

}

if(s>K)

break;

}

}

g<<nr%99979;

return 0;

}

Explicație:

A mea e mai buna;)

Alte întrebări interesante