結果
問題 | No.243 出席番号(2) |
ユーザー |
|
提出日時 | 2016-08-23 23:22:58 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 53 ms / 2,000 ms |
コード長 | 978 bytes |
コンパイル時間 | 830 ms |
コンパイル使用メモリ | 71,296 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 00:06:12 |
合計ジャッジ時間 | 1,944 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include <iostream>#include <vector>#define repeat(i,n) for (int i = 0; (i) < (n); ++(i))#define repeat_reverse(i,n) for (int i = (n)-1; (i) >= 0; --(i))typedef long long ll;using namespace std;const int mod = 1e9+7;int main() {// inputint n; cin >> n;vector<int> a(n); repeat (i,n) cin >> a[i];// preparevector<ll> fact(n+1);fact[0] = 1;repeat (i,n) fact[i+1] = fact[i] * (i+1) % mod;// computevector<int> cnt(n);repeat (i,n) {if (a[i] < n) {cnt[a[i]] += 1;}}vector<ll> dp(n+1);dp[0] = 1;repeat (i,n) if (cnt[i]) {repeat_reverse (k,n) {dp[k+1] += dp[k] * cnt[i] % mod;dp[k+1] %= mod;}}ll ans = fact[n];repeat (k,n) {ans += dp[k+1] * fact[n-(k+1)] % mod * ((k+1) % 2 == 1 ? -1 : 1) % mod;ans %= mod;}ans += mod;ans %= mod;// outputcout << ans << endl;return 0;}