0251 - Interclasare 2: Difference between revisions
Pagină nouă: = Cerinţa = Se dau două şiruri <code>a</code> şi <code>b</code>, cu <code>n</code>, respectiv <code>m</code> elemente, numere naturale, '''ordonate strict crescător'''. Să se afişeze, în ordine strict crescătoare, valorile existente în ambele şiruri. = Date de intrare = Fişierul de intrare <code>interclasare2.in</code> conţine pe prima linie numărul <code>n</code>; urmează <code>n</code> numere naturale, ordonate strict crescător, ce pot fi dispuse pe mai mu... |
No edit summary |
||
Line 29: | Line 29: | ||
=== 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({ | |||
input: fs.createReadStream('interclasare2.in'), | |||
output: fs.createWriteStream('interclasare2.out') | |||
}); | |||
let a = new Array(100001); | |||
let b = new Array(100001); | |||
let c = new Array(200001); | |||
let n, m, k, i, j; | |||
rl.on('line', (line) => { | |||
const values = line.split(' '); | |||
if (n === undefined) { | |||
n = parseInt(values[0]); | |||
for (let i = 1; i <= n; i++) { | |||
a[i] = parseInt(values[i]); | |||
} | |||
} else if (m === undefined) { | |||
m = parseInt(values[0]); | |||
for (let j = 1; j <= m; j++) { | |||
b[j] = parseInt(values[j]); | |||
} | |||
i = 1; | |||
j = 1; | |||
k = 0; | |||
while (i <= n && j <= m) { | |||
if (a[i] === b[j]) { | |||
c[++k] = a[i++]; | |||
j++; | |||
} else if (a[i] < b[j]) { | |||
i++; | |||
} else { | |||
j++; | |||
} | |||
} | |||
for (let t = 1; t <= k; t++) { | |||
rl.output.write(c[t] + ' '); | |||
if (t % 10 === 0) { | |||
rl.output.write('\n'); | |||
} | |||
} | |||
rl.output.write('\n'); | |||
rl.close(); | |||
} | |||
}); | |||
</syntaxhighlight> |
Latest revision as of 14:16, 14 December 2023
Cerinţa[edit | edit source]
Se dau două şiruri a
şi b
, cu n
, respectiv m
elemente, numere naturale, ordonate strict crescător. Să se afişeze, în ordine strict crescătoare, valorile existente în ambele şiruri.
Date de intrare[edit | edit source]
Fişierul de intrare interclasare2.in
conţine pe prima linie numărul n
; urmează n
numere naturale, ordonate strict crescător, ce pot fi dispuse pe mai multe linii. Linia următoare conţine numărul m
şi urmează m
numere naturale, ordonate strict crescător, ce pot fi dispuse pe mai multe linii.
Date de ieşire[edit | edit source]
Fişierul de ieşire interclasare2.out
va conţine, în ordine strict crescătoare, valorile existente în ambele şiruri. Aceste valori vor fi afişate câte 10
pe o linie, separate prin spaţii. Ultima linie poate conţine mai puţin de 10
de valori.
Restricţii şi precizări[edit | edit source]
1 ≤ n,m ≤ 100.000
- valorile elementelor celor două şiruri vor fi mai mici decât
1.000.000
Exemplu:[edit | edit source]
interclasare2.in
7 1 3 4 7 20 24 60 9 3 5 7 8 9 10 12 20 24
interclasare2.out
3 7 20 24
Î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('interclasare2.in'),
output: fs.createWriteStream('interclasare2.out')
});
let a = new Array(100001);
let b = new Array(100001);
let c = new Array(200001);
let n, m, k, i, j;
rl.on('line', (line) => {
const values = line.split(' ');
if (n === undefined) {
n = parseInt(values[0]);
for (let i = 1; i <= n; i++) {
a[i] = parseInt(values[i]);
}
} else if (m === undefined) {
m = parseInt(values[0]);
for (let j = 1; j <= m; j++) {
b[j] = parseInt(values[j]);
}
i = 1;
j = 1;
k = 0;
while (i <= n && j <= m) {
if (a[i] === b[j]) {
c[++k] = a[i++];
j++;
} else if (a[i] < b[j]) {
i++;
} else {
j++;
}
}
for (let t = 1; t <= k; t++) {
rl.output.write(c[t] + ' ');
if (t % 10 === 0) {
rl.output.write('\n');
}
}
rl.output.write('\n');
rl.close();
}
});
</syntaxhighlight>