結果
問題 | No.462 6日知らずのコンピュータ |
ユーザー |
![]() |
提出日時 | 2016-12-13 11:51:45 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,562 bytes |
コンパイル時間 | 1,050 ms |
コンパイル使用メモリ | 97,328 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-30 00:45:15 |
合計ジャッジ時間 | 3,080 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
/* -*- coding: utf-8 -*- * * 462.cc: No.462 6日知らずのコンピュータ - yukicoder */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int MAX_N = 60; typedef long long ll; const ll MOD = 1000000007; /* typedef */ typedef pair<int,ll> pil; typedef deque<pil> dqil; /* global variables */ ll fracs[MAX_N + 1]; dqil as; /* subroutines */ /* main */ int main() { int n, k; cin >> n >> k; fracs[0] = 1; for (int i = 1; i <= n; i++) fracs[i] = (fracs[i - 1] * i) % MOD; for (int i = 0; i < k; i++) { ll ai; cin >> ai; int c = 0; for (ll a = ai; a != 0; a >>= 1) if ((a & 1) != 0) c++; as.push_back(pil(c, ai)); } sort(as.begin(), as.end()); if (as.empty() || as.front().first != 0) as.push_front(pil(0, 0)); if (as.back().first != n) as.push_back(pil(n, (1LL << n) - 1)); k = as.size(); //for (dqil::iterator dit = as.begin(); dit != as.end(); dit++) //printf("%d,%lld\n", dit->first, dit->second); ll ans = 1; for (int i = 1; i < k; i++) { if (as[i - 1].first == as[i].first || (as[i - 1].second & as[i].second) != as[i - 1].second) { ans = 0; break; } ans = (ans * fracs[as[i].first - as[i - 1].first]) % MOD; } printf("%lld\n", ans); return 0; }