You are viewing a single comment's thread. Return to all comments →
JS solution - all tests OK*
Console explained code: It will log every step so you can understad what is happening
let counterLogs = 0 function llog (where, message){ console.log(`${counterLogs} -- ${where} -> ${message}`); counterLogs++ // llog(``, ); } Array.prototype.swap = function (a, b) { let temp = Number(this[a]); this[a] = this[b] this[b] = temp } function bribedOne(actualPos, onePosBelow){ let rigthPosValue = actualPos + 1; let notEndOfQueue = (actualPos - 1 >= 0); llog(`bribedOne`, `${onePosBelow} === ${rigthPosValue}`); return notEndOfQueue && onePosBelow === rigthPosValue } function bribedTwo(actualPos, twoPosBelow){ let notEndOfQueue = (actualPos - 2 >= 0); let rigthPosValue = actualPos + 1; llog(`bribedTwo`, `${twoPosBelow} === ${rigthPosValue}`); return notEndOfQueue && twoPosBelow === rigthPosValue } function minimumBribes(queue) { let totalBribes = 0; let queueSize = queue.length let endOfQuery = queueSize - 1; llog(`Initial Queue`, queue); for (let actualPos = endOfQuery; actualPos >=0; actualPos--) { llog(`actualPos Index`, actualPos); let rigthPosValue = actualPos + 1; let actualValue = queue[actualPos]; llog(`actualValue`, actualValue); let inRightPosition = actualValue === rigthPosValue; llog(`inRightPosition`, `${actualValue} === ${rigthPosValue}`); if (inRightPosition) { continue; } let onePosBelow = actualPos - 1; let twoPosBelow = actualPos - 2; if (bribedOne(actualPos, queue[onePosBelow])) { totalBribes += 1 llog(`queue before swap`, queue); llog(`swap`, `${actualValue} - ${queue[onePosBelow]}`); queue.swap(actualPos, onePosBelow) llog(`queue after swaps`, queue); } else if (bribedTwo(actualPos, queue[twoPosBelow])) { totalBribes += 2; llog(`queue before swap`, queue); llog(`swap twoPosBelow - onePosBelow`, `${queue[twoPosBelow]} - ${queue[onePosBelow]}`); queue.swap(twoPosBelow, onePosBelow); llog(`queue after swap`, queue); llog(`swap onePosBelow - actualPos`, `${queue[onePosBelow]} - ${actualValue}`); queue.swap(onePosBelow, actualPos); llog(`queue after swaps `, queue); } else { console.log('Too chaotic'); return } llog(`-- NEXT --`, `-- NEXT --`); } console.log(totalBribes) } function main() { const t = parseInt(readLine().trim(), 10); for (let tItr = 0; tItr < t; tItr++) { const n = parseInt(readLine().trim(), 10); const q = readLine().replace(/\s+$/g, '').split(' ').map(qTemp => parseInt(qTemp, 10)); minimumBribes(q); } }
Seems like cookies are disabled on this browser, please enable them to open this website
New Year Chaos
You are viewing a single comment's thread. Return to all comments →
JS solution - all tests OK*
Console explained code: It will log every step so you can understad what is happening