結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
|
提出日時 | 2016-12-13 00:15:49 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 718 bytes |
コンパイル時間 | 881 ms |
コンパイル使用メモリ | 67,040 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-29 18:39:08 |
合計ジャッジ時間 | 3,125 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 63 WA * 21 |
ソースコード
#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_popcount(a[i] ^ a[i + 1]); tmp = tmp * fact[v] % mod; } cout << tmp << endl; }