| Task: | Laskettelukeskus |
| Sender: | raikasdev |
| Submission time: | 2023-11-07 17:58:55 +0200 |
| Language: | Node.js |
| Status: | READY |
| Result: | 53 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 53 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.11 s | 1, 2 | details |
| #2 | ACCEPTED | 0.12 s | 1, 2 | details |
| #3 | ACCEPTED | 0.12 s | 1, 2 | details |
| #4 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #5 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #6 | ACCEPTED | 0.11 s | 1, 2 | details |
| #7 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #8 | ACCEPTED | 0.12 s | 1, 2 | details |
| #9 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #10 | ACCEPTED | 0.12 s | 1, 2 | details |
| #11 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #12 | ACCEPTED | 0.12 s | 1, 2 | details |
| #13 | TIME LIMIT EXCEEDED | -- | 2 | details |
Code
var readline = require("readline");
// Super Epic Input Tool For Testing :))))
// Fun fact to the moderators: I'm a professional Node.js developer (I have done it as a job and a freelancer, since I was 13!).
// Kinda sad you use such old Node.js version as 12, but suit yourself.
if (process.env.TEST !== "1") {
let lines = [];
const r = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false,
});
r.on("line", (line) => {
lines.push(line);
if (lines[0] && lines.length === parseInt(lines[0]) + 1) {
run(...lines);
r.close();
}
});
} else {
// This part of the program is used for input management while testing the code :)
// CSES doesn't run this, so it can be pretty much ignored. :)
const lines = require("fs")
.readFileSync(`${__filename.replace(".js", ".txt")}`)
.toString()
.split("\n");
run(...lines);
}
// SOLUTION STARTS
function run(...lines) {
let slopes = []; // Offset by one
const slopeCount = parseInt(lines.shift());
for (let i = 0; i < slopeCount; i++) {
slopes[i] = {
id: i,
needed: 0,
passed: 0,
route: [],
};
}
// Listen for input
for (let i = 0; i < slopeCount - 1; i++) {
const [from, to] = lines
.shift()
.split(" ")
.map((v) => parseInt(v));
slopes[to - 1] = {
...slopes[to - 1],
route: [...(slopes[from - 1].route || []), from - 1],
};
}
lines
.shift()
.split(" ")
.forEach((v, index) => (slopes[index].needed = parseInt(v)));
slopes = slopes.sort((a, b) => b.route.length - a.route.length);
const pass = (id, times = 1) => {
const ind = slopes.findIndex((v) => v.id === id);
slopes[ind] = {
...slopes[ind],
passed: slopes[ind].passed + times,
};
};
let amount = 0;
slopes.forEach((slope, index) => {
if (slope.needed > 0 && slope.passed < slope.needed) {
[slope.id, ...slope.route].forEach((id) =>
pass(id, slope.needed - slope.passed)
);
amount += slope.needed - slope.passed;
}
});
console.log(amount);
}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 5 1 2 1 3 3 4 3 5 ... |
| correct output |
|---|
| 6 |
| user output |
|---|
| 6 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 73 1 64 64 23 1 88 ... |
| correct output |
|---|
| 2675 |
| user output |
|---|
| 2675 |
Test 3
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 36 36 56 56 59 36 97 ... |
| correct output |
|---|
| 2808 |
| user output |
|---|
| 2808 |
Test 4
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 45452 1 74209 45452 78960 45452 79820 ... |
| correct output |
|---|
| 28399367694319 |
| user output |
|---|
| (empty) |
Test 5
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 31165 1 23263 31165 89516 31165 53122 ... |
| correct output |
|---|
| 28546840313799 |
| user output |
|---|
| (empty) |
Test 6
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 79 79 9 79 45 45 10 ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 7
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 66038 1 56789 56789 7403 66038 69542 ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| (empty) |
Test 8
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 2 3 3 4 4 5 ... |
| correct output |
|---|
| 100 |
| user output |
|---|
| 100 |
Test 9
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 2 3 3 4 4 5 ... |
| correct output |
|---|
| 1000000000 |
| user output |
|---|
| (empty) |
Test 10
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 2809 |
| user output |
|---|
| 2809 |
Test 11
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 26053917212428 |
| user output |
|---|
| (empty) |
Test 12
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 5000 |
| user output |
|---|
| 5000 |
Test 13
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 50000000000000 |
| user output |
|---|
| (empty) |
