51nod1667-概率好题【容斥,组合数学】

1|0正题

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1667


1|1题目大意

两个人。
第一个人有k1个集合,第i个包括了范围[L1i,R1i]的整数。
第二个人有k2个集合,第i个包括了范围[L2i,R2i]的整数。

现在两个人分别从各个集合中取出一个数字然后求和。

求第一个人大于/等于/小于第二个人的概率。

1T5,k1,k28,1L,R107


1|2解题思路

很神奇的题,设xi[0,R1iL1i],yi[0,R2iL2i]那么要求(求小于的话)

i=1k1L1i+i=1k1xi<i=1k2R2ii=1k2yi

i=1k1xi+i=1k2yi<i=1k2R2ii=1k1L1i

右边是已知的,那考虑到k很小那这个问题就是一个很简单的组合数问题了。

枚举一些突破范围限制的数然后容斥即可。

时间复杂度:O(2kk)


1|3code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll P=1e9+7; ll T,n,m,sum,S,ans1,ans2,ans3,w[30],inv[30]; ll power(ll x,ll b){ ll ans=1; while(b){ if(b&1)ans=ans*x%P; x=x*x%P;b>>=1; } return ans; } ll C(ll n,ll m){ ll ans=1; for(ll i=n;i>n-m;i--)ans=ans*i%P; return ans*inv[m]%P; } void dfs(ll x,ll s,ll f,ll &sum){ if(s<0)return; if(x>n+m){ (sum+=C(s+n+m,n+m)*f)%=P; return; } dfs(x+1,s,f,sum); dfs(x+1,s-w[x]-1,-f,sum); return; } signed main() { inv[1]=1;for(ll i=2;i<30;i++)inv[i]=P-inv[P%i]*(P/i)%P; inv[0]=1;for(ll i=1;i<30;i++)inv[i]=inv[i-1]*inv[i]%P; scanf("%lld",&T); while(T--){ scanf("%lld",&n);sum=-1;S=1; for(ll i=1,l;i<=n;i++) scanf("%lld%lld",&l,&w[i]),w[i]=w[i]-l,sum-=l,S=S*(w[i]+1)%P; scanf("%lld",&m); for(ll i=n+1,l;i<=n+m;i++) scanf("%lld%lld",&w[i],&l),w[i]=l-w[i],sum+=l,S=S*(w[i]+1)%P; ll ans1=0;dfs(1,sum,1,ans1); ll ans2=0;dfs(1,sum+1,1,ans2); ll ans3=(S-ans2)%P,invn=power(S,P-2); ans2=(ans2-ans1)%P;ans3=ans3*invn%P; ans1=ans1*invn%P;ans2=ans2*invn%P; printf("%lld %lld %lld\n",(ans3+P)%P,(ans2+P)%P,(ans1+P)%P); } return 0; }

__EOF__

本文作者QuantAsk
本文链接https://www.cnblogs.com/QuantAsk/p/15333846.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   QuantAsk  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示