結果
| 問題 |
No.475 最終日 - Writerの怠慢
|
| コンテスト | |
| ユーザー |
ococonomy1
|
| 提出日時 | 2024-05-05 19:39:25 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,654 bytes |
| コンパイル時間 | 1,115 ms |
| コンパイル使用メモリ | 111,464 KB |
| 最終ジャッジ日時 | 2025-02-21 11:04:08 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 6 TLE * 2 -- * 7 |
ソースコード
//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <complex>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <vector>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using pli = pair<ll,int>;
#define TEST cerr << "TEST" << endl
#define AMARI 998244353
//#define AMARI 1000000007
#define el '\n'
#define El '\n'
#define eps 1e-6
//r位を取った時スコアはいくつになるか
ll func(ll score,int r,ll s){
ll ans = 500 * s / (8 + 2 * r);
ans += 50 * s;
ans += score;
return ans;
}
#define MULTI_TEST_CASE false
void solve(void){
int n;
ll s;
int id;
cin >> n >> s >> id;
vector<ll> a(n);
for(int i = 0; i < n; i++)cin >> a[i];
swap(a[id],a[n - 1]);
ll writer_score = a.back() + 100LL * s;
a.pop_back();
n--;
sort(a.rbegin(),a.rend());
long double ans = 1;
cout << fixed << setprecision(15);
int bunbo = n;
for(int i = 0; i < n; i++){
//もし(N-i)位をとっても writer_score をオーバーするなら0を出力
if(func(a[i],n - i,s) > writer_score){
cout << 0 << el;
return;
}
//cerr << func(a[i],1,s) << el;
//もし1位をとっても writer_score をオーバーしないならそのまま
if(func(a[i],1,s) <= writer_score)continue;
//何位以下じゃないといけないかにぶたん
int l = 0,r = n - i + 1;
while(/*r - l >= 2*/ false){
int c = (r + l) / 2;
if(func(a[i],c,s) <= writer_score)r = c;
else l = c;
}
//cerr << l << ' ' << r << el;
for(int j = r; j >= l - 1; j--){
if(func(a[i],j,s) > writer_score){
//j+1位がギリギリOKで、j位はダメ
//一番下の取りうる順位はn
int bunsi = 0,bunbo = 0;
bunbo = n - i;
bunsi = bunbo - j;
//cerr << bunsi << ' ' << bunbo << el;
ans *= (long double)bunsi / (long double)bunbo;
break;
}
}
}
cout << ans << El;
return;
}
void calc(void){
return;
}
signed main(void){
cin.tie(nullptr);
ios::sync_with_stdio(false);
calc();
int t = 1;
if(MULTI_TEST_CASE)cin >> t;
while(t--){
solve();
}
return 0;
}
ococonomy1