結果
問題 | No.243 出席番号(2) |
ユーザー |
![]() |
提出日時 | 2015-07-27 19:03:23 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 49 ms / 2,000 ms |
コード長 | 1,491 bytes |
コンパイル時間 | 685 ms |
コンパイル使用メモリ | 83,704 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-16 04:13:44 |
合計ジャッジ時間 | 2,340 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>//#include<cctype>#include<climits>#include<iostream>#include<string>#include<vector>#include<map>//#include<list>#include<queue>#include<deque>#include<algorithm>//#include<numeric>#include<utility>#include<complex>//#include<memory>#include<functional>#include<cassert>#include<set>const int dx[] = {1, 0, -1, 0};const int dy[] = {0, 1, 0, -1};using namespace std;typedef long long ll;typedef vector<int> vi;typedef vector<ll> vll;typedef pair<int, int> pii;typedef complex<double> C;const int MAXN = 5005;const ll MOD = 1e9+7;int N;int cnt[MAXN];ll dp[2][MAXN];ll fact[MAXN];int main() {cin.tie(0);ios::sync_with_stdio(false);fact[0] = 1;for (int i = 1; i < MAXN; i++) {fact[i] = (fact[i-1] * i) % MOD;}cin >> N;for (int i = 0; i < N; i++) {int a;cin >> a;cnt[a]++;}dp[0][0] = 1;for (int i = 0; i < N; i++) {int cur = i%2;int tar = (1^cur);memset(dp[tar], 0, sizeof(dp[tar]));for (int j = 0; j <= i; j++) {(dp[tar][j] += dp[cur][j]) %= MOD;(dp[tar][j+1] += dp[cur][j] * cnt[i]) %= MOD;}}ll ans = 0;for (int i = 0; i <= N; i++) {ll plus = (dp[N%2][i]*fact[N-i]) % MOD;if (i%2) plus *= -1;(ans += plus) %= MOD;}if (ans < 0) ans += MOD;cout << ans << endl;return 0;}