zoukankan      html  css  js  c++  java
  • 【BZOJ4481&JSOI2015】非诚勿扰(数学期望)

    听说JSOI有版权问题就不放图了

    如果前面的文章里的图需要删掉请通知我

    题意:有一些女的要挑一些男的,挑中的几率均为p。一个男的可以无限次被挑中。若女a选中男b,女c选中男d,a<c,b>d则对答案有1的贡献。问期望总贡献。

    思路:我们设女x选中男y的几率是p(X,Y),可以预处理出。

    设y为女x喜欢的第a人。

    则P(x,y)=(1-p)^a-1*p+(1-p)^m+a-1*p+... 无限等差数列求和

    =a1/(1-q) a1=(1-p)^(a-1)*p,q=(1-p)^m

    先将关系双关键字递增排序 那么用树状数组统计前缀概率和

    没了

     1 var x,y:array[1..1000000]of longint;
     2     t:array[1..1000000]of extended;
     3     mi:array[0..1000000]of extended;
     4     n,m,i,now,j,k:longint;
     5     tmp,ans,p:extended;
     6 
     7 function lowbit(x:longint):longint;
     8 begin
     9  exit(x and (-x));
    10 end;
    11 
    12 procedure add(x:longint;y:extended);
    13 begin
    14  while x>0 do
    15  begin
    16   t[x]:=t[x]+y;
    17   x:=x-lowbit(x);
    18  end;
    19 end;
    20 
    21 function sum(x:longint):extended;
    22 begin
    23  sum:=0;
    24  while x<=n do
    25  begin
    26   sum:=sum+t[x];
    27   x:=x+lowbit(x);
    28  end;
    29 end;
    30 
    31 procedure swap(var x,y:longint);
    32 var t:longint;
    33 begin
    34  t:=x; x:=y; y:=t;
    35 end;
    36 
    37 procedure qsort(l,r:longint);
    38 var mid1,mid2,i,j:longint;
    39 begin
    40  i:=l; j:=r; mid1:=x[(l+r)>>1]; mid2:=y[(l+r)>>1];
    41  repeat
    42   while (mid1>x[i])or(mid1=x[i])and(mid2>y[i]) do inc(i);
    43   while (mid1<x[j])or(mid1=x[j])and(mid2<y[j]) do dec(j);
    44   if i<=j then
    45   begin
    46    swap(x[i],x[j]);
    47    swap(y[i],y[j]);
    48    inc(i); dec(j);
    49   end;
    50  until i>j;
    51  if l<j then qsort(l,j);
    52  if i<r then qsort(i,r);
    53 end;
    54 
    55 begin
    56  assign(input,'cross.in'); reset(input);
    57  assign(output,'cross.out'); rewrite(output);
    58  readln(n,m);
    59  readln(p);
    60  for i:=1 to n do read(x[i],y[i]);
    61  qsort(1,m);
    62  mi[0]:=1;
    63  for i:=1 to n do mi[i]:=mi[i-1]*(1-p);
    64  now:=1;
    65  for i:=1 to n do
    66  begin
    67   j:=now;
    68   while x[j]=i do inc(j);
    69   for k:=now to j-1 do
    70   begin
    71    tmp:=mi[k-now]*p/(1-mi[j-now]);
    72    //writeln(tmp);
    73    ans:=ans+tmp*sum(y[k]+1);
    74    add(y[k],tmp);
    75   end;
    76   now:=j;
    77  end;
    78  writeln(ans:0:2);
    79 
    80  close(input);
    81  close(output);
    82 end.
    View Code
    null
  • 相关阅读:
    Java实习二
    Java实习一
    从0开始 Java实习 黑白棋
    从0开始 Java学习 packet用法
    解题报告:hdu 1276 士兵队列训练问题
    从0开始 数据结构 AC自动机 模板(from kkke)
    从0开始 数据结构 AC自动机 hdu 2222
    从0开始 数据结构 字典树 hdu1251
    从0开始 图论学习 拓扑排序 链式前向星表示法
    ui爬虫工具-未完成
  • 原文地址:https://www.cnblogs.com/myx12345/p/5034082.html
Copyright © 2011-2022 走看看