結果
問題 |
No.462 6日知らずのコンピュータ
|
ユーザー |
![]() |
提出日時 | 2017-04-03 01:11:45 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,241 bytes |
コンパイル時間 | 1,256 ms |
コンパイル使用メモリ | 165,300 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-08 00:23:27 |
合計ジャッジ時間 | 2,889 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
#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; LL N; LL k; LL a[111]; LL b[111]; vector<LL>v; int main(){ /*double aaa=134217728-864691128455135232; aaa*=-1; while(aaa>1){ cout<<aaa<<endl; aaa/=2; } //cout<<134217728-864691128455135232<<endl; return 0; */ 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()); LL now=0; LL count=0; REP(i,k){ if(i!=0){ if(v[i]==v[i-1]){ cout<<0<<endl; return 0; } } LL check=now; LL test=v[i]; LL c=1; while(check!=0||test!=0){ LL aa=check%2; LL bb=test%2; if(aa==1&&bb==0){ //cout<<now<<"aa"<<v[i]<<endl;; cout<<0<<endl; return 0; } if(aa==0&&bb==1){ now+=c; count++; } c*=2; check/=2; test/=2; } //cout<<v[i]<<" ans "<<now<<endl; 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); }