【TypeScript】 AtCoder abc121_c
C問題としては簡単な部類だと思う。
安い店から計算していき、合計本数に到達したらbreakする。
テストコード
import { main } from './main' describe('tests', () => { test('1', () => { expect(main(2, 5, [[4, 9], [2, 4]])).toEqual(12) }) test('2', () => { expect(main(4, 30, [[6, 18], [2, 5], [3, 10], [7, 9]])).toEqual(130) }) })
提出コード (AC)
export const main = ( N: number, M: number, abList: Array<Array<number>> ): number => { abList.sort((x, y) => { if (x[0] < y[0]) return -1 if (x[0] > y[0]) return 1 return 0 }) let res = 0 let remain = M for (let i = 0; i < N; i++) { const [a, b] = abList[i] if (b < remain) { res += a * b remain -= b } else { res += a * remain break } } return res } const input: string = require('fs').readFileSync('/dev/stdin', 'UTF-8') const lines = input.split('\n') const [N, M] = lines[0].split(' ').map(item => Number(item)) const abList: Array<Array<number>> = [] for (let i = 0; i < N; i++) { abList.push(lines[i + 1].split(' ').map(l => Number(l))) } const res = main(N, M, abList) console.log(res)
トランスパイル後の下記で提出。
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.main = function (N, M, abList) { abList.sort(function (x, y) { if (x[0] < y[0]) return -1; if (x[0] > y[0]) return 1; return 0; }); var res = 0; var remain = M; for (var i = 0; i < N; i++) { var _a = abList[i], a = _a[0], b = _a[1]; if (b < remain) { res += a * b; remain -= b; } else { res += a * remain; break; } } return res; }; var input = require('fs').readFileSync('/dev/stdin', 'UTF-8'); var lines = input.split('\n'); var _a = lines[0].split(' ').map(function (item) { return Number(item); }), N = _a[0], M = _a[1]; var abList = []; for (var i = 0; i < N; i++) { abList.push(lines[i + 1].split(' ').map(function (l) { return Number(l); })); } var res = exports.main(N, M, abList); console.log(res);