結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
![]() |
提出日時 | 2019-04-17 10:47:40 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.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; }