提出 #68284319


ソースコード 拡げる

const fs = require('fs');

/**
 * 標準入力を同期的に読み込む
 * @returns {string} 入力データ
 */
function readInput() {
    return fs.readFileSync('/dev/stdin', 'utf8').trim();
}

/**
 * 入力データを解析して配列に変換
 * @param {string} input - 入力データ
 * @returns {{n: number, arr: number[]}} - 配列のサイズと要素
 */
function parseInput(input) {
    const lines = input.split('\n');
    const n = parseInt(lines[0]);
    const arr = [];
    
    for (let i = 1; i <= n; i++) {
        arr.push(parseInt(lines[i]));
    }
    
    return { n, arr };
}

/**
 * 条件を満たすペア(i, j)の数を計算
 * 1 <= j < i <= N かつ Aj = Ai を満たすペアの数を返す
 * 
 * アプローチ: 各値の出現回数をカウントし、組み合わせ数を計算
 * 同じ値がk個ある場合、ペア数は k * (k-1) / 2
 * 
 * @param {number[]} arr - 入力配列
 * @returns {number} 条件を満たすペアの総数
 */
function countPairs(arr) {
    // 各値の出現回数をカウント
    const countMap = new Map();
    
    for (const num of arr) {
        countMap.set(num, (countMap.get(num) || 0) + 1);
    }
    
    let totalPairs = 0;
    
    // 各値について、ペア数を計算
    for (const count of countMap.values()) {
        if (count >= 2) {
            // k個の要素から2個を選ぶ組み合わせ数 = k * (k-1) / 2
            totalPairs += Math.floor(count * (count - 1) / 2);
        }
    }
    
    return totalPairs;
}

/**
 * メイン処理
 */
function main() {
    const input = readInput();
    const { n, arr } = parseInput(input);
    const result = countPairs(arr);
    console.log(result);
}

// 実行
main();

提出情報

提出日時
問題 B54 - Counting Same Values
ユーザ myoshizumi
言語 JavaScript (Node.js 18.16.1)
得点 1000
コード長 1795 Byte
結果 AC
実行時間 99 ms
メモリ 68628 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1000 / 1000
結果
AC × 1
AC × 8
セット名 テストケース
Sample sample_01
All max_01, max_02, random_01, random_02, random_03, random_04, random_05, sample_01
ケース名 結果 実行時間 メモリ
max_01 AC 99 ms 58952 KiB
max_02 AC 66 ms 59392 KiB
random_01 AC 39 ms 42808 KiB
random_02 AC 39 ms 42840 KiB
random_03 AC 40 ms 42940 KiB
random_04 AC 44 ms 45424 KiB
random_05 AC 80 ms 68628 KiB
sample_01 AC 40 ms 42872 KiB