結果

問題 No.155 生放送とBGM
ユーザー kimiyukikimiyuki
提出日時 2016-02-19 18:40:08
言語 C++11
(gcc 11.4.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,487 bytes
コンパイル時間 829 ms
コンパイル使用メモリ 74,160 KB
最終ジャッジ日時 2023-10-23 18:32:38
合計ジャッジ時間 1,306 ms
ジャッジサーバーID
(参考情報)
judge13 / judge14
このコードへのチャレンジ(β)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:28:9: error: ‘accumulate’ was not declared in this scope
   28 |     if (accumulate(s.begin(), s.end(), 0) <= l) {
      |         ^~~~~~~~~~

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>
#include <array>
#include <set>
#include <map>
#include <queue>
#include <tuple>
#include <unordered_set>
#include <unordered_map>
#include <functional>
#include <cstdio>
#include <cassert>
#define repeat(i,n) for (int i = 0; (i) < (n); ++(i))
#define repeat_from(i,m,n) for (int i = (m); (i) < (n); ++(i))
#define repeat_reverse(i,n) for (int i = (n)-1; (i) >= 0; --(i))
#define repeat_from_reverse(i,m,n) for (int i = (n)-1; (i) >= (m); --(i))
typedef long long ll;
using namespace std;
int main() {
    int n, l; cin >> n >> l;
    l *= 60;
    vector<int> s(n);
    repeat (i,n) {
        int mn, sc; char dummy; cin >> mn >> dummy >> sc;
        s[i] = mn * 60 + sc;
    }
    if (accumulate(s.begin(), s.end(), 0) <= l) {
        cout << n << endl;
        return 0;
    }
    vector<double> fact(n+1); fact[0] = 1; repeat (i,n) fact[i+1] = (i+1) * fact[i];
    double p = 0;
    repeat (h,n) {
        vector<vector<ll> > dp(n, vector<ll>(l));
        dp[0][0] = 1;
        repeat (i,n) if (i != h) {
            repeat_reverse (j,n-1) {
                repeat_reverse (k,max(0,l-s[i])) {
                    dp[j+1][k+s[i]] += dp[j][k];
                }
            }
        }
        repeat (j,n) {
            repeat_from (k,max(0,l-s[h]),l) {
                p += (j+1) * fact[j] * dp[j][k] * fact[n-j-1];
            }
        }
    }
    double q = fact[n];
    printf("%.12lf\n", p /(double) q);
    return 0;
}
0