集训队作业2018: 喂鸽子(min-max容斥)

博客讲述了小Z喂鸽子的问题,其中鸽子要吃到k粒玉米才会饱。通过min-max容斥原理和FFT(快速傅里叶变换)计算期望的填饱所有鸽子所需时间。
摘要由CSDN通过智能技术生成

题意:
小Z是养鸽子的人。一天,小Z给鸽子们喂玉米吃。一共有n只鸽子,小Z每秒会等概率选择一只鸽子并给他一粒玉米。一只鸽子饱了当且仅当它吃了的玉米粒数量 ≥ k ≥k k。 小Z想要你告诉他,期望多少秒之后所有的鸽子都饱了。

题解:
min-max容斥枚举下集合大小,FFT预处理一下系数算min的期望即可。

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;

const int N=55, M=50005, mod=998244353;
inline int add(int x,int y) {
   return (x+y>=mod) ? (x+y-mod) : (x+y);}
inline int dec(int x,int y) {
   return (x-y<0) ? (x-y+mod) : (x-y);}
inline int mul(int x,int y) {
   return (long long)x*y%mod;}
inline int power(int a,int b,int rs=1) {
   for(;b;b>>=1,a=mul(a,a)) if(b&1) rs=mul(rs,a); return rs;}
int x,y;
inline void exgcd(int a,int b,int &x,int &y) {
   b ? (exgcd(b,a%b,y,x),y-=a/b*x) : (x=1,y=0);}
inline int cinv(int a) {
   return (exgcd(a,mod,x,y),(x+mod)%mod);}

int n,k; 
struct combin {
   
	int fac[M],ifac[M];
	combin() {
   
		fac[0]=1;
		for(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值