結果

問題 No.118 門松列(2)
ユーザー temptemp
提出日時 2015-01-19 20:05:44
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,168 bytes
コンパイル時間 618 ms
コンパイル使用メモリ 76,496 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-04 21:38:13
合計ジャッジ時間 2,237 ms
ジャッジサーバーID
(参考情報)
judge14 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <functional>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <string>
#include <cstring>

using namespace std;

typedef long long ll;

#define MODN 1000000007

ll expoModN(ll a, ll b) {
  if (b == 1) return a;
  if (b == 0) return 1;
  ll t = (expoModN(a, b/2)%MODN);
  return (((t*t)%MODN)*(expoModN(a, b%2)%MODN))%MODN;
}

ll combiModN(ll a, ll b) {
  ll ta = 1;
  for (ll i = 0; i < b; i++) ta = (ta*(a--))%MODN;
  ll tb = 1;
  while (b) tb = (tb*(b--))%MODN;
  return (ta*expoModN(tb,MODN-2))%MODN;
}

int main() {
  ll n;
  cin >> n;
  ll a[n];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  int memo[101];
  memset(memo, 0, sizeof(memo));
  sort(a, a+n);
  vector <ll> t;
  t.push_back(a[0]);
  for (int i = 1; i < n; i++) {
    memo[a[i]]++;
    if (t[int(t.size())-1] != a[i]) {
      t.push_back(a[i]);
    }
  }
  ll x = t.size();
  ll ans = combiModN(x, 3);
  for (int i = 0; i < 101; i++) {
    if (!memo[i]) continue;
    ans = (ans*memo[i])%MODN;
  }

  cout << ans << endl;
}
0