1527 - Zoom: Difference between revisions

From Bitnami MediaWiki
Raul (talk | contribs)
Pagină nouă: = Cerința = Se dă o matrice pătratică de ordin <code>p</code> şi alta cu <code>m</code> linii şi <code>n</code> coloane, ale căror elemente sunt egale cu <code>0</code>, <code>1</code> sau <code>2</code>. Determinaţi numărul de apariţii ale primei matrice în a doua. = Date de intrare = Fișierul de intrare <code>zoom.in</code> conține pe prima linie numerele <code>p,m,n</code>, pe următoarele <code>p</code> linii câte <code>p</code> numere naturale, iar pe urm...
 
Raul (talk | contribs)
No edit summary
 
Line 35: Line 35:


=== Lipește codul aici ===
=== Lipește codul aici ===
1
<syntaxhighlight lang="python" line="1">
​const fs = require('fs');


const readline = require('readline');


const rl = readline.createInterface({
​const fs = require('fs');


  input: fs.createReadStream('zoom.in'),
const readline = require('readline');


  output: fs.createWriteStream('zoom.out')
const rl = readline.createInterface({


});
  input: fs.createReadStream('zoom.in'),


let a = new Array(1002).fill(0).map(() => new Array(1002).fill(0));
  output: fs.createWriteStream('zoom.out')


let v = new Array(20).fill(0).map(() => new Array(20).fill(0));
});


rl.on('line', (line) => {
let a = new Array(1002).fill(0).map(() => new Array(1002).fill(0));


  const [x, y, z] = line.split(' ').map(Number);
let v = new Array(20).fill(0).map(() => new Array(20).fill(0));


  for (let i = 0; i < x; ++i) {
rl.on('line', (line) => {


    const row = rl.readline().split(' ').map(Number);
  const [x, y, z] = line.split(' ').map(Number);


    for (let j = 0; j < x; ++j) {
  for (let i = 0; i < x; ++i) {


      v[i][j] = row[j];
    const row = rl.readline().split(' ').map(Number);


    }
    for (let j = 0; j < x; ++j) {


  }
      v[i][j] = row[j];


  for (let i = 0; i < y; ++i) {
    }


    const row = rl.readline().split(' ').map(Number);
  }


    for (let j = 0; j < z; ++j) {
  for (let i = 0; i < y; ++i) {


      a[i][j] = row[j];
    const row = rl.readline().split(' ').map(Number);


    }
    for (let j = 0; j < z; ++j) {


  }
      a[i][j] = row[j];


  let cnt = 0;
    }


  for (let i = 0; i <= y - x; ++i) {
  }


    for (let j = 0; j <= z - x; ++j) {
  let cnt = 0;


      let ok = 0;
  for (let i = 0; i <= y - x; ++i) {


      for (let h = i, hi = 0; h < i + x; ++h, ++hi) {
    for (let j = 0; j <= z - x; ++j) {


        for (let g = j, gj = 0; g < j + x; ++g, ++gj) {
      let ok = 0;


          if (a[h][g] !== v[hi][gj]) {
      for (let h = i, hi = 0; h < i + x; ++h, ++hi) {


            ok = 1;
        for (let g = j, gj = 0; g < j + x; ++g, ++gj) {


          }
          if (a[h][g] !== v[hi][gj]) {


        }
            ok = 1;


      }
          }


      if (ok === 0) {
        }


        cnt++;
      }


      }
      if (ok === 0) {


    }
        cnt++;


  }
      }


  rl.write(cnt.toString());
    }


});
  }


rl.on('close', () => {
  rl.write(cnt.toString());


  process.exit(0);
});


});
rl.on('close', () => {
 
  process.exit(0);
 
});
 
</syntaxhighlight>

Latest revision as of 14:17, 14 December 2023

Cerința[edit | edit source]

Se dă o matrice pătratică de ordin p şi alta cu m linii şi n coloane, ale căror elemente sunt egale cu 0, 1 sau 2. Determinaţi numărul de apariţii ale primei matrice în a doua.

Date de intrare[edit | edit source]

Fișierul de intrare zoom.in conține pe prima linie numerele p,m,n, pe următoarele p linii câte p numere naturale, iar pe următoarele m linii câte n numere naturale, reprezentând elementele celor două matrice.

Date de ieșire[edit | edit source]

Fișierul de ieșire zoom.out va conține pe prima linie numărul de apariţii ale primei matrice în a doua.

Restricții și precizări[edit | edit source]

  • 2 ≤ m , n ≤ 1000
  • 1 ≤ p ≤ 10
  • p ≤ m şi p ≤ n
  • elementele matricelor sunt 0,1 sau 2
  • prima matrice apare în a doua dacă există o submatrice în a doua ale cărei elemente să coincidă cu ale primei matrice

Exemplu:[edit | edit source]

zoom.in

2 4 5
0 1
2 1
1 2 0 1 2
0 1 2 1 2
2 1 2 0 1
1 1 1 2 1

zoom.out

3

Explicație[edit | edit source]

Prima matrice apare în a doua în trei poziţii astfel încât colţul stânga sus al său să coincidă pe rând cu elementele din a doua matrice situate în poziţiile (1,3),(2,1),(3,4).

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1">


​const fs = require('fs');

const readline = require('readline');

const rl = readline.createInterface({

 input: fs.createReadStream('zoom.in'),
 output: fs.createWriteStream('zoom.out')

});

let a = new Array(1002).fill(0).map(() => new Array(1002).fill(0));

let v = new Array(20).fill(0).map(() => new Array(20).fill(0));

rl.on('line', (line) => {

 const [x, y, z] = line.split(' ').map(Number);
 for (let i = 0; i < x; ++i) {
   const row = rl.readline().split(' ').map(Number);
   for (let j = 0; j < x; ++j) {
     v[i][j] = row[j];
   }
 }
 for (let i = 0; i < y; ++i) {
   const row = rl.readline().split(' ').map(Number);
   for (let j = 0; j < z; ++j) {
     a[i][j] = row[j];
   }
 }
 let cnt = 0;
 for (let i = 0; i <= y - x; ++i) {
   for (let j = 0; j <= z - x; ++j) {
     let ok = 0;
     for (let h = i, hi = 0; h < i + x; ++h, ++hi) {
       for (let g = j, gj = 0; g < j + x; ++g, ++gj) {
         if (a[h][g] !== v[hi][gj]) {
           ok = 1;
         }
       }
     }
     if (ok === 0) {
       cnt++;
     }
   }
 }
 rl.write(cnt.toString());

});

rl.on('close', () => {

 process.exit(0);

});

</syntaxhighlight>