提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |