結果
| 問題 |
No.475 最終日 - Writerの怠慢
|
| コンテスト | |
| ユーザー |
🐬hec
|
| 提出日時 | 2016-12-23 23:06:59 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 41 ms / 2,000 ms |
| コード長 | 1,102 bytes |
| コンパイル時間 | 1,987 ms |
| コンパイル使用メモリ | 173,116 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-24 01:30:47 |
| 合計ジャッジ時間 | 3,687 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 |
ソースコード
#include <bits/stdc++.h>
#define _overload(_1,_2,_3,name,...) name
#define _rep(i,n) _range(i,0,n)
#define _range(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload(__VA_ARGS__,_range,_rep,)(__VA_ARGS__)
using namespace std;
inline int yukicoder(int s,int r){
int base=50*s;
int bonus=500*s/(8+2*r); // \frac{50s}{0.8+0.2R} = \frac{50s}{\frac{8+2R}{10}}
return base+bonus;
}
int main(void){
int n,s,writer_id;
cin >> n >> s >> writer_id;
assert(3<= n and n <=77777);
assert(1<= s and s <=500000);
assert(0<= writer_id and writer_id <= n-1);
vector<int> a(n);
for(auto &elem:a){
cin >> elem;
assert(0 <= elem and elem <= 100000000);
}
int writer_score=a[writer_id]+100*s;
vector<int> b;
rep(i,n) if(i!=writer_id) b.push_back(a[i]);
sort(begin(b),end(b));
using R=long double;
R ans=1.0;
const int total=n-1;
rep(solved,total){
int add_score=yukicoder(s,solved+1);
int valid=upper_bound(begin(b),end(b),writer_score-add_score)-begin(b);
ans*=1.0*(valid-solved)/(total-solved);
}
cout.precision(20);
cout << fixed << ans << endl;
return 0;
}
🐬hec