結果

問題 No.412 花火大会
ユーザー te-shte-sh
提出日時 2017-10-25 16:26:06
言語 D
(dmd 2.106.1)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,025 bytes
コンパイル時間 842 ms
コンパイル使用メモリ 98,956 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-03 16:27:25
合計ジャッジ時間 2,030 ms
ジャッジサーバーID
(参考情報)
judge11 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,376 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 AC 1 ms
4,380 KB
testcase_03 AC 1 ms
4,376 KB
testcase_04 AC 1 ms
4,384 KB
testcase_05 AC 1 ms
4,380 KB
testcase_06 AC 1 ms
4,384 KB
testcase_07 AC 1 ms
4,376 KB
testcase_08 AC 1 ms
4,380 KB
testcase_09 AC 1 ms
4,376 KB
testcase_10 AC 2 ms
4,380 KB
testcase_11 AC 1 ms
4,376 KB
testcase_12 AC 1 ms
4,380 KB
testcase_13 AC 1 ms
4,376 KB
testcase_14 AC 1 ms
4,380 KB
testcase_15 AC 1 ms
4,376 KB
testcase_16 AC 1 ms
4,380 KB
testcase_17 AC 1 ms
4,380 KB
testcase_18 AC 1 ms
4,380 KB
testcase_19 AC 2 ms
4,376 KB
testcase_20 AC 1 ms
4,380 KB
testcase_21 AC 1 ms
4,380 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import std.algorithm, std.conv, std.range, std.stdio, std.string;

void main()
{
  auto s = readln.split.to!(int[]), ns = s.length;
  auto n = readln.chomp.to!size_t;
  auto e = readln.split.to!(int[]);

  s.sort();
  auto b = s[0], c = s[1], d = s[2];

  auto s1 = e.count!(ei => b <= ei && ei < c);
  auto s2 = e.count!(ei => c <= ei && ei < d);
  auto s3 = e.count!(ei => d <= ei);

  auto pt = pascalTriangle!int(n), ans = 0;

  foreach (i1; 0..s1+1)
    foreach (i2; 0..s2+1)
      foreach (i3; 0..s3+1) {
        if (i3 >= 3 ||
            i3 == 2 && (i2 >= 1 || i1 >= 1) ||
            i3 == 1 && (i2 >= 2 || i2 == 1 && i1 >= 1)) {
          ans += pt[s3][i3] * pt[s2][i2] * pt[s1][i1] * 2 ^^ (n-s1-s2-s3);
        }
      }

  writeln(ans);
}

pure T[][] pascalTriangle(T)(size_t n)
{
  auto t = new T[][](n + 1);
  t[0] = new T[](1);
  t[0][0] = 1;
  foreach (i; 1..n+1) {
    t[i] = new T[](i + 1);
    t[i][0] = t[i][$-1] = 1;
    foreach (j; 1..i)
      t[i][j] = t[i - 1][j - 1] + t[i - 1][j];
  }
  return t;
}
0