結果
問題 | No.462 6日知らずのコンピュータ |
ユーザー | koba-e964 |
提出日時 | 2016-12-13 00:16:11 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 720 bytes |
コンパイル時間 | 588 ms |
コンパイル使用メモリ | 66,824 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-29 18:44:03 |
合計ジャッジ時間 | 2,601 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
#include <algorithm> #include <iostream> #include <vector> #define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++) using namespace std; typedef long long int ll; typedef vector<ll> VL; const ll mod = 1e9 + 7; ll fact[100]; int main(void){ int n, k; cin >> n >> k; VL a(k); REP(i, 0, k) { cin >> a[i]; } a.push_back(0); a.push_back((1LL << n) - 1); sort(a.begin(), a.end()); REP(i, 0, k + 1) { if ((a[i] & a[i + 1]) != a[i]) { cout << 0 << endl; return 0; } } fact[0] = 1; REP(i, 1, 100) { fact[i] = fact[i - 1] * i % mod; } ll tmp = 1; REP(i, 0, k + 1) { int v = __builtin_popcountll(a[i] ^ a[i + 1]); tmp = tmp * fact[v] % mod; } cout << tmp << endl; }