暑假集训日记——8.8(容斥+概率)

E - Card Collector
题意:
每包里面最多只有一张卡片(可能没有),要集齐n张不同的卡片(1<=n<=20)
问集齐 n n n张卡片要买的包数期望

题解:
设集齐第 i i i张的天数需要 d i di di
求解买 n n n张卡片需要的包数: d 1 U d 2 U d 3... U d n d1 U d2 U d3 ... U dn d1Ud2Ud3...Udn- 1 1 1,所以容斥公式求解

概率和期望:(可由无穷级数得证)
如果一件事发生的概率为 p i pi pi,那么第一次发生这件事次数期望为 1 / p i 1/pi 1/pi
同理,a和b这两件事发生的概率为 p 1 , p 2 p1,p2 p1,p2,则第一次发生某一件事发生的次数期望为 1 / ( p 1 + p 2 ) 1/(p1+p2) 1/(p1+p2)

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

const int MAXN = 3e5;
const int N = 22;
double p[N];
double dp[1<<N];
int n,cnt;

double IEP()
{
   
    double sum=0;
    for(int i=1;i<(1<<cnt);i++)///容斥原理
    {
   
        double f=-1,ans=0;
        for(int j=0;j<cnt;j++)///枚举每种质因数的组合
        {
   
            if(i&(1<<j))
            {
   
                ans+=p[j];
                f=f*(-1);
            }
        }
        sum=sum+(1.0/ans)*f;///(x/ans)表示:1-x中有ans因数的个数
    }
    return sum;
}

int main()
{
   
    while(~scanf("%d", &n))
    {
   

        for(int i = 0; i < n; i ++)
            scanf("%lf", &p[i]);
        double ans = 0.0;
        cnt=n;
        ans=IEP();
        printf("%.5lf\n", ans);
    }

}

F - Visible Trees
题意:
有许多树组成一个 m ∗ n m * n mn网格,网格从 ( 1 , 1 ) (1,1) (1,1)开始。农夫夏洛克站在 ( 0 , 0 ) (0,0) (0,0)点。他想知道他能看到多少棵树。如果两棵树和夏洛克站在一条线上,农民夏洛克只能看到离他最近的那棵树。
题解:
求解1到m和1到n有多少对互质的数,分解 m i n ( n , m ) min(n,m) min(n,m)的一个数,然后容斥求解互质即可

#include<cstdio>
#include<algorithm>
#define mp make_pair
#define maxn 10000000
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef long double ld;

const int N=1e6+10;
const int MAXN=20010;
const int INF=0x3f3f3f3f;
const double eps=0.0000001;
const ll mod=998244353 ;
ll n,m,x,y,k,cnt,t;
ll prime[N];

void 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值