-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfastfood.js
77 lines (60 loc) · 1.98 KB
/
fastfood.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
function main() {
const lineToNums = () => readLine().split(' ').map(Number);
let cases = parseInt(readLine());
while(cases--) {
const prices = [];
const stickers = {};
const nm = lineToNums();
const n = nm.shift(); // diff types of prices
const m = nm.shift(); // diff types of stickers
for (let i = 0; i < n; i++) {
const s = lineToNums();
const k = s.shift();
const v = s.pop();
prices.push({
toClaim: k,
cashValue: v,
required: s
});
}
const coll = lineToNums();
for (let i = 0; i < coll.length; i++) {
stickers[i + 1] = coll[i];
}
let totPrice = 0;
for (let i = 0; i < prices.length; i++) {
let canBuy = true;
const r = prices[i].required;
while(canBuy) {
for (let j = 0; j < r.length; j++) {
if (stickers.hasOwnProperty(r[j])) {
if (stickers[r[j]] === 0) {
canBuy = false;
delete stickers[r[j]];
break;
} else if (stickers[r[j]] - 1 === 0) {
delete stickers[r[j]];
} else stickers[r[j]]--;
} else canBuy = false;
}
if (canBuy) totPrice += prices[i].cashValue;
}
}
console.log(totPrice);
}
}