提出 #61346087
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=(int)(a);i<(int)(b);i++)
#define all(p) p.begin(),p.end()
#include <atcoder/modint>
using mint = atcoder::modint1000000007;
namespace po167{
template<class T>
struct Binomial{
std::vector<T> fact_vec, fact_inv_vec;
void extend(int m = -1){
int n = fact_vec.size();
if (m == -1) m = n * 2;
if (n >= m) return;
fact_vec.resize(m);
fact_inv_vec.resize(m);
for (int i = n; i < m; i++){
fact_vec[i] = fact_vec[i - 1] * T(i);
}
fact_inv_vec[m - 1] = T(1) / fact_vec[m - 1];
for (int i = m - 1; i > n; i--){
fact_inv_vec[i - 1] = fact_inv_vec[i] * T(i);
}
}
Binomial(int MAX = 0){
fact_vec.resize(1, T(1));
fact_inv_vec.resize(1, T(1));
extend(MAX + 1);
}
T fact(int i){
if (i < 0) return 0;
return fact_vec[i];
}
T invfact(int i){
if (i < 0) return 0;
return fact_inv_vec[i];
}
T C(int a, int b){
if (a < b || b < 0) return 0;
return fact(a) * invfact(b) * invfact(a - b);
}
};
}
// CITRUS CURIO CITY / FREDERIC
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<int> A(M);
rep(i, 0, M) cin >> A[i];
vector<mint> dp(1 << N);
dp[0] = 1;
po167::Binomial<mint> table(1 << N);
reverse(all(A));
for (auto x : A){
auto n_dp = dp;
rep(i, 0, 1 << N) rep(j, 0, N){
if (i & (1 << j)) continue;
mint tmp = dp[i];
tmp *= table.C((1 << N) - x - i, (1 << j) - 1);
tmp *= table.fact(1 << j);
n_dp[i + (1 << j)] -= tmp;
}
swap(n_dp, dp);
}
mint ans = 0;
rep(i, 0, 1 << N) ans += dp[i] * table.fact((1 << N) - 1 - i);
ans *= (1 << N);
cout << ans.val() << "\n";
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | F - Dark Horse |
| ユーザ | potato167 |
| 言語 | C++ 17 (gcc 12.2) |
| 得点 | 1100 |
| コード長 | 2151 Byte |
| 結果 | AC |
| 実行時間 | 87 ms |
| メモリ | 4380 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 1100 / 1100 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt |
| All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 01.txt | AC | 8 ms | 3568 KiB |
| 02.txt | AC | 72 ms | 4296 KiB |
| 03.txt | AC | 76 ms | 4256 KiB |
| 04.txt | AC | 79 ms | 4288 KiB |
| 05.txt | AC | 51 ms | 4228 KiB |
| 06.txt | AC | 61 ms | 4252 KiB |
| 07.txt | AC | 72 ms | 4380 KiB |
| 08.txt | AC | 80 ms | 4252 KiB |
| 09.txt | AC | 83 ms | 4228 KiB |
| 10.txt | AC | 80 ms | 4244 KiB |
| 11.txt | AC | 2 ms | 3864 KiB |
| 12.txt | AC | 8 ms | 4096 KiB |
| 13.txt | AC | 17 ms | 4288 KiB |
| 14.txt | AC | 25 ms | 4228 KiB |
| 15.txt | AC | 1 ms | 3412 KiB |
| 16.txt | AC | 1 ms | 3420 KiB |
| 17.txt | AC | 1 ms | 3440 KiB |
| 18.txt | AC | 1 ms | 3416 KiB |
| 19.txt | AC | 1 ms | 3484 KiB |
| 20.txt | AC | 1 ms | 3528 KiB |
| 21.txt | AC | 86 ms | 4252 KiB |
| 22.txt | AC | 82 ms | 4220 KiB |
| 23.txt | AC | 77 ms | 4288 KiB |
| 24.txt | AC | 72 ms | 4124 KiB |
| 25.txt | AC | 55 ms | 4276 KiB |
| 26.txt | AC | 29 ms | 4156 KiB |
| 27.txt | AC | 1 ms | 3468 KiB |
| 28.txt | AC | 1 ms | 3488 KiB |
| 29.txt | AC | 1 ms | 3604 KiB |
| 30.txt | AC | 1 ms | 3468 KiB |
| 31.txt | AC | 1 ms | 3480 KiB |
| 32.txt | AC | 87 ms | 4304 KiB |
| 33.txt | AC | 1 ms | 3412 KiB |
| 34.txt | AC | 1 ms | 3480 KiB |
| 35.txt | AC | 1 ms | 3324 KiB |
| 36.txt | AC | 1 ms | 3480 KiB |
| sample-01.txt | AC | 1 ms | 3528 KiB |
| sample-02.txt | AC | 1 ms | 3488 KiB |
| sample-03.txt | AC | 1 ms | 3520 KiB |
| sample-04.txt | AC | 1 ms | 3400 KiB |
| sample-05.txt | AC | 86 ms | 4156 KiB |