結果
問題 |
No.794 チーム戦 (2)
|
ユーザー |
![]() |
提出日時 | 2019-03-03 22:59:29 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,035 bytes |
コンパイル時間 | 1,494 ms |
コンパイル使用メモリ | 163,976 KB |
実行使用メモリ | 8,064 KB |
最終ジャッジ日時 | 2024-06-23 13:19:08 |
合計ジャッジ時間 | 4,381 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 WA * 10 |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll mod=1000000007; int main(){ ll n,k;cin>>n>>k; vector<ll> a(n);for(ll i=0;i<n;i++)cin>>a[i]; sort(a.begin(),a.end()); ll are[n+2]; are[0]=0; are[1]=1; for(ll i=2;i<=n+1;i++){ ll u=are[i-1]*(2*i-1); u%=mod; are[i]=u; } ll tai[n]; for(ll i=n-1;i>=0;i--){ ll y=k-a[i]; ll u=upper_bound(a.begin(),a.end(),y)-a.begin(); tai[i]=u; } for(ll i=0;i<n/2;i++){ if(a[i]+a[n-1-i]>k){ cout<<0<<endl; return 0; } } ll ans=0; ll now=1; for(ll i=n-1;i>=0;i--){ ll sum=1; ll t=tai[i]; if(t>=i)break; if(i<n-1){ now*=(t-n+2+i); now%=mod; } sum*=now*(i-t); sum%=mod; sum*=are[n/2-n+i]; sum%=mod; ans+=sum; ans%=mod; } ll rr=are[n/2]; ll anss=rr-ans; anss+=mod; cout<<anss%mod<<endl; }