Submission #67085207


Source Code Expand

import * as fs from 'fs';

const input = fs.readFileSync('/dev/stdin', 'utf8').trim().split('\n');
const [H, W, K] = input[0].split(' ').map(Number);
const grid: string[][] = input.slice(1).map(line => line.split(''));

let maxBlack = 0;

for (let bit = 0; bit < (1 << H); bit++) {
    const paintedRows: number[] = [];
    for (let i = 0; i < H; i++) {
        if ((bit >> i) & 1) paintedRows.push(i);
    }

    const rowPaintCount = paintedRows.length;
    if (rowPaintCount > K) continue;

    // 塗り操作のコピー
    const painted: string[][] = grid.map(row => [...row]);

    // 行を黒に塗る
    for (const row of paintedRows) {
        for (let j = 0; j < W; j++) {
            painted[row][j] = '#';
        }
    }

    // 各列の黒マス数
    const blackCountPerCol: number[] = new Array(W).fill(0);
    for (let j = 0; j < W; j++) {
        for (let i = 0; i < H; i++) {
            if (painted[i][j] === '#') {
                blackCountPerCol[j]++;
            }
        }
    }

    // 残り操作回数で列を貪欲に選ぶ
    const columnGain: [number, number][] = [];
    for (let j = 0; j < W; j++) {
        const gain = H - blackCountPerCol[j];
        columnGain.push([gain, j]);
    }

    columnGain.sort((a, b) => b[0] - a[0]);

    const columnsToPaint = new Set<number>();
    const remainingCols = K - rowPaintCount;
    for (let i = 0; i < Math.min(remainingCols, columnGain.length); i++) {
        columnsToPaint.add(columnGain[i][1]);
    }

    // 黒マス合計を計算
    let totalBlack = 0;
    for (let i = 0; i < H; i++) {
        for (let j = 0; j < W; j++) {
            if (painted[i][j] === '#' || columnsToPaint.has(j)) {
                totalBlack++;
            }
        }
    }

    maxBlack = Math.max(maxBlack, totalBlack);
}

console.log(maxBlack);

Submission Info

Submission Time
Task A72 - Tile Painting
User myoshizumi
Language TypeScript 5.1 (Node.js 18.16.1)
Score 1000
Code Size 1890 Byte
Status AC
Exec Time 95 ms
Memory 49472 KiB

Compile Error


			

			
				

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 1
AC × 22
Set Name Test Cases
Sample 00_sample_00
All 00_sample_00, 10_random_00, 10_random_01, 10_random_02, 10_random_03, 10_random_04, 10_random_05, 10_random_06, 10_random_07, 10_random_08, 10_random_09, 10_random_10, 10_random_11, 10_random_12, 10_random_13, 10_random_14, 20_max_00, 20_max_01, 20_max_02, 20_max_03, 20_max_04, 99_challenge_00
Case Name Status Exec Time Memory
00_sample_00 AC 45 ms 42780 KiB
10_random_00 AC 40 ms 42772 KiB
10_random_01 AC 41 ms 43152 KiB
10_random_02 AC 41 ms 43076 KiB
10_random_03 AC 88 ms 49260 KiB
10_random_04 AC 39 ms 42684 KiB
10_random_05 AC 40 ms 42768 KiB
10_random_06 AC 40 ms 42636 KiB
10_random_07 AC 68 ms 49212 KiB
10_random_08 AC 70 ms 49472 KiB
10_random_09 AC 68 ms 49396 KiB
10_random_10 AC 40 ms 42784 KiB
10_random_11 AC 40 ms 42760 KiB
10_random_12 AC 77 ms 46852 KiB
10_random_13 AC 38 ms 42636 KiB
10_random_14 AC 65 ms 47060 KiB
20_max_00 AC 88 ms 49256 KiB
20_max_01 AC 56 ms 49000 KiB
20_max_02 AC 92 ms 49260 KiB
20_max_03 AC 95 ms 49256 KiB
20_max_04 AC 76 ms 49320 KiB
99_challenge_00 AC 39 ms 42784 KiB