結果
問題 | No.155 生放送とBGM |
ユーザー |
![]() |
提出日時 | 2017-01-24 22:04:50 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 888 ms / 6,000 ms |
コード長 | 2,352 bytes |
コンパイル時間 | 1,328 ms |
コンパイル使用メモリ | 101,176 KB |
実行使用メモリ | 95,744 KB |
最終ジャッジ日時 | 2024-12-23 08:03:31 |
合計ジャッジ時間 | 8,169 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
#include <algorithm>#include <iostream>#include <cstdio>#include <map>#include <numeric>#include <cmath>#include <set>#include <sstream>#include <string>#include <vector>#include <queue>#include <stack>#include <complex>#include <string.h>#include <unordered_set>#include <unordered_map>#include <bitset>#include <iomanip>#include <sys/time.h>#include <random>using namespace std;#define endl '\n'#define ALL(v) (v).begin(), (v).end()#define RALL(v) (v).rbegin(), (v).rend()#define UNIQ(v) (v).erase(unique((v).begin(), (v).end()), (v).end())typedef long long ll;typedef long double ld;typedef pair<int, int> P;typedef complex<double> comp;typedef vector< vector<ld> > matrix;struct pairhash {public:template<typename T, typename U>size_t operator()(const pair<T, U> &x) const {size_t seed = hash<T>()(x.first);return hash<U>()(x.second) + 0x9e3779b9 + (seed<<6) + (seed>>2);}};const int inf = 1e9 + 9;const ll mod = 1e9 + 7;const double eps = 1e-8;const double pi = acos(-1);int n, l;int s[55];ll dp[55][60*60*55];ll t[55][60*60*55];double fact[55];void calc_fact() {fact[0] = fact[1] = 1.0;for (int i = 2; i <= n; i++) fact[i] = fact[i-1] * i;}double solve() {calc_fact();l *= 60;int sum = 0;for (int i = 0; i < n; i++) sum += s[i];if (sum <= l) return n;dp[0][0] = 1;for (int i = 0; i < n; i++) {for (int j = n; j >= 1; j--) {for (int k = l; k >= s[i]; k--) {dp[j][k] += dp[j-1][k-s[i]];}}}double res = 0;for (int i = 0; i < n; i++) {memset(t, 0, sizeof(t));for (int j = 0; j < n; j++) {for (int k = 0; k < l; k++) {t[j][k] = dp[j][k];if (k>=s[i] && j>0) t[j][k] -= t[j-1][k-s[i]];res += t[j][k] * fact[j] * fact[n-1-j];}}}res /= fact[n];return res;}int convert(string t) {return 60 * (10 * (t[0]-'0') + t[1]-'0') + (10 * (t[3]-'0') + t[4]-'0');}void input() {cin >> n >> l;string t;for (int i = 0; i < n; i++) {cin >> t;s[i] = convert(t);}}int main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(15);input();cout << solve() << endl;}