結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
![]() |
提出日時 | 2017-04-03 00:56:42 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,925 bytes |
コンパイル時間 | 1,241 ms |
コンパイル使用メモリ | 164,388 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-08 00:22:55 |
合計ジャッジ時間 | 3,352 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 59 WA * 25 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--) #define REP(i,n) for (int i=0;i<(n);i++) #define RREP(i,n) for (int i=(n)-1;i>=0;i--) typedef long long LL; LL ans=0; int N; int k; LL a[111]; int b[111]; vector<LL>v; int main(){ cin>>N; cin>>k; if(k==0){ ans=1; REP(i,N){ ans*=(i+1); ans%=1000000007; } }else{ REP(i,k){ cin>>a[i]; v.push_back(a[i]); } sort(v.begin(),v.end()); int now=0; int count=0; REP(i,k){ if(i!=0){ if(v[i]==v[i-1]){ cout<<0<<endl; return 0; } } int check=now; int test=v[i]; int c=0; while(check!=0||test!=0){ int aa=check%2; int bb=test%2; if(aa==1&&bb==0){ cout<<0<<endl; return 0; } if(aa==0&&bb==1){ now|=(1<<c); count++; } c++; check/=2; test/=2; } b[i]=count; } ans=1; REP(i,b[0]){ ans*=(i+1); ans%=1000000007; } for(int i=1;i<k;i++){ REP(j,b[i]-b[i-1]){ ans*=(j+1); ans%=1000000007; } } REP(i,N-b[k-1]){ ans*=(i+1); ans%=1000000007; } } /*REP(i,k){ cout<<b[i]<<endl; }*/ cout<<ans<<endl; return(0); }