結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
![]() |
提出日時 | 2019-04-17 11:05:18 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 916 bytes |
コンパイル時間 | 1,799 ms |
コンパイル使用メモリ | 174,884 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-22 08:28:36 |
合計ジャッジ時間 | 3,623 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long #define mod (int)(1e9+7) #define imp {cout<<0<<endl;return 0;} int bit(int n){ int r=n%2; if(n<0)return -1; while(n/=2)r+=n%2; return r; } int mul(int a,int b){ return ((a%mod)*(b%mod))%mod; } int fact(int n){ if(!n)return 1; return mul(n,fact(n-1)); } signed main(){ int n,k,r=1; cin>>n>>k; if(!k){ cout<<fact(n)<<endl; return 0; } vector<int> in(k); for(int i=0;i<k;++i)cin>>in[i]; sort(in.begin(),in.end()); for(int i=1;i<k;++i){ if(bit(in[i]-in[i-1])!=bit(in[i])-bit(in[i-1]))imp; } vector<int> a; if(bit(in[0]))a.push_back(0); for(int i=0;i<k;++i)a.push_back(bit(in[i])); if(bit(in[k-1])!=n)a.push_back(n); r=fact(a[1]); for(int i=2;i<(int)a.size();++i){ r=mul(r,fact(a[i]-a[i-1])); } cout<<r<<endl; return 0; }