結果
問題 | 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; }