結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
![]() |
提出日時 | 2021-04-05 02:03:23 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 915 bytes |
コンパイル時間 | 1,967 ms |
コンパイル使用メモリ | 176,376 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-29 13:25:18 |
合計ジャッジ時間 | 4,239 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
#include <bits/stdc++.h> using namespace std; int count_one(long long a){ int ans=0; while(a>0){ ans+=(a%2); a=a>>1; } return ans; } long long frac(int a){ long long MOD=1000000007; long long ans=1; for(int i=1;i<=a;i++){ ans=(ans*i)%MOD; } return ans; } int main(){ int N,k; cin>>N>>k; vector<long long> a(k); for(int i=0;i<k;i++){ cin>>a[i]; } sort(a.begin(),a.end(),[](long long a,long long b){return count_one(a)<count_one(b);}); for(int i=1;i<k;i++){ if((a[i]&a[i-1])!=a[i-1]){ cout<<0<<endl; return 0; } } vector<int> b={0}; for(int i=0;i<k;i++){ b.push_back(count_one(a[i])); } b.push_back(N); long long ans=1; long long MOD=1000000007; for(int i=0;i<k+1;i++){ ans=(ans*frac(b[i+1]-b[i]))%MOD; } cout<<ans<<endl; }