結果
| 問題 | No.462 6日知らずのコンピュータ |
| コンテスト | |
| ユーザー |
yosswi414
|
| 提出日時 | 2019-04-17 11:05:18 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.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;
}
yosswi414