记录编号 373159 评测结果 AAAAAAAAA
题目名称 [SYZOI Round1]组合数 最终得分 100
用户昵称 Gravatarsxysxy 是否通过 通过
代码语言 C++ 运行时间 0.042 s
提交时间 2017-02-20 10:45:25 内存使用 0.30 MiB
显示代码纯文本
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
struct poly{
  int k;
  vector<LL> a;
  inline void setk(int nk){
    k = nk;
    a.resize(nk+1);
  }
  poly conv(poly &p){
    poly r;
    r.setk(k+p.k);
    fill(r.a.begin(), r.a.end(), 0);
    for(int i = 0; i <= k; i++)
      for(int j = 0; j <= p.k; j++)
        r.a[i+j] += a[i]*p.a[j];
    return r;
  }
};
int main(){
  freopen("conbination.in", "r", stdin);
  freopen("conbination.out", "w", stdout);
  poly r;
  r.setk(0);
  r.a[0] = 1; //r = 1;
  int n; 
  scanf("%d", &n);
  for(int i = 0; i < n; i++){
    int x; 
    scanf("%d", &x);
    poly t; t.setk(x);
    t.a[0] = 1;
    t.a[x] = 1;
    r = r.conv(t);
  }
  LL L, R;
  LL tot = 0, in = 0;
  scanf("%lld %lld", &L, &R);
  for(int i = 0; i <= r.k; i++){
    if(i >= L && i <= R)in += r.a[i];
    tot += r.a[i];
  }
  printf("%.4lf\n", 1.0*in/tot);
  return 0;
}