結果

問題 No.794 チーム戦 (2)
ユーザー KotRmKotRm
提出日時 2019-03-15 05:43:10
言語 JavaScript
(node v21.7.1)
結果
WA  
実行時間 -
コード長 1,491 bytes
コンパイル時間 28 ms
コンパイル使用メモリ 6,684 KB
実行使用メモリ 80,608 KB
最終ジャッジ日時 2024-04-21 02:32:25
合計ジャッジ時間 5,700 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 74 ms
49,176 KB
testcase_01 AC 74 ms
42,432 KB
testcase_02 WA -
testcase_03 AC 74 ms
42,352 KB
testcase_04 AC 79 ms
42,428 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 AC 71 ms
40,320 KB
testcase_14 TLE -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
testcase_32 -- -
testcase_33 -- -
testcase_34 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
		input: process.stdin,
		output: process.stdout
});
reader.on('line', (line) => {
		lines.push(line);
});

/*nPr*/
function P(n, r) {
    var ans = 1
    for(var i = 0; i < r; i++) {
        ans *= n - i;
    }
    return ans;
}
/*nCr*/
function C(n, r) {
    return P(n, r) / P(r, r);
}
/*N人を二人組みに分ける通りの数*/
function Func(N){
    var ans = 1;
    for(var i = N; i >= 2; i-=2){
        ans *= C(i, 2);
    }
    return ans/P(N/2, N/2);
}

reader.on('close', () => {
    /*標準入力の受け取り*/
	var N = Number(lines[0].split(' ')[0]);
	var K = Number(lines[0].split(' ')[1]);
	var A = lines[1].split(' ').map(Number).sort(function(a,b){return b - a;});
	
	/*Aiの値で二組に分配*/	
	var X = Array(); /*誰とでも組める人 Ai≦K/2*/
	var Y = Array(); /*Xの人と組まないとKを超えてしまう人*/
	for(var i=0; i<N; i++){
        if(A[i]<=(K/2)){
            break;
        }
        Y.push(A[i]);
	}
	for(var j=i; j<N; j++){
	    X.push(A[j]);
	}	
	
	/*Yを含む2人組の組み方*/
	var result = 1;
	for(i=0; i<Y.length; i++){
	    for(j=0; j<X.length; j++){
            if(Y[i]+X[j]<=K){
                result *= (X.length-(i+1));
                break;
            }
        }
    }
	/*残った(X.length-i)人を二人組みに分ける通り*/
	result *= Func(X.length-i);
	
	console.log(result);
});
0