結果
| 問題 | No.462 6日知らずのコンピュータ |
| コンテスト | |
| ユーザー |
yosswi414
|
| 提出日時 | 2019-04-17 10:47:40 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 915 bytes |
| 記録 | |
| コンパイル時間 | 1,603 ms |
| コンパイル使用メモリ | 173,296 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-22 08:28:24 |
| 合計ジャッジ時間 | 3,594 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 54 WA * 30 |
ソースコード
#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);
cin>>in[0];
for(int i=1;i<k;++i){
cin>>in[i];
if(in[i]<in[i-1])imp;
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