結果
| 問題 |
No.794 チーム戦 (2)
|
| コンテスト | |
| ユーザー |
tsutaj
|
| 提出日時 | 2019-02-22 22:43:24 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,116 bytes |
| コンパイル時間 | 917 ms |
| コンパイル使用メモリ | 107,836 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-25 10:44:06 |
| 合計ジャッジ時間 | 3,517 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 WA * 13 |
ソースコード
// #define _GLIBCXX_DEBUG // for STL debug (optional)
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
#include <bitset>
using namespace std;
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define int long long int
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
typedef pair<int, int> pii;
typedef long long ll;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
const ll INF = 1001001001001001LL;
const ll MOD = 1000000007LL;
int mod_pow(int n, int k) {
int res = 1;
for(; k>0; k>>=1) {
if(k & 1) (res *= n) %= MOD;
(n *= n) %= MOD;
}
return res;
}
int calc(int teams) {
int res = 1;
for(int i=1; i<=2*teams; i++) {
(res *= i) %= MOD;
}
for(int i=1; i<=teams; i++) {
(res *= mod_pow(i, MOD-2)) %= MOD;
}
int inv2 = mod_pow(2, MOD-2);
for(int i=1; i<=teams; i++) {
(res *= inv2) %= MOD;
}
return res;
}
signed main() {
int N, K; cin >> N >> K;
vector<int> A(N);
for(int i=0; i<N; i++) {
cin >> A[i];
}
sort(A.rbegin(), A.rend());
int ans = 1, idx = N-1;
for(int i=0; i<N/2; i++) {
if(A[i] + A[i+1] <= K) {
int teams = (N - 2*i) / 2;
(ans *= calc(teams));
break;
}
while(idx > i and A[i] + A[idx] <= K) {
idx--;
}
if(idx == N-1) {
ans = 0;
break;
}
int rem = N - idx - 1;
// fprintf(stderr, "i = %lld, idx = %lld, rem = %lld\n", i, idx, rem);
(ans *= rem - i) %= MOD;
}
cout << ans << endl;
return 0;
}
tsutaj