luogu-P3726题解

news/2025/3/16 22:12:03/文章来源:https://www.cnblogs.com/Lyrella/p/18775818

简要题意

两个人抛硬币,求第一个人正面朝上次数大于第二个人的情况数对 \(p\) 取模,\(p\) 不是质数。

数据范围\(1\le a,b\le 10^{15},b\le a\le b+10^4\)

题解

首先你需要会扩展卢卡斯定理然后就只剩暴力推式子(逃

我们可以枚举两个人正面朝上次数,就可以列出一个式子:

\[\sum_{i=0}^a\sum_{j=0}^{i-1}{a\choose i}{b\choose j} \]

转换枚举方式,有:

\[\begin{aligned} & \sum_{i=1}^a\sum_{j=0}^{i+j\le s}{a\choose i+j}{b\choose j}\\ =& \sum_{i=1}^a\sum_{j=0}^{b}{a\choose i+j}{b\choose b-j}\\ =& \sum_{i=1}^a{a+b\choose b+i}\\ =& \sum_{i=b+1}^a{a+b\choose i}\\ \end{aligned} \]

考虑到 \(a,b\) 之间相差不大,考虑直接枚举每个 \(a+b\choose i\),但是似乎还是会超时。考虑到答案是杨辉三角中一排组合数的后缀,于是我们可以把答案拆成:

\[\sum_{i=b+1}^{{(a+b)\over2} - 1}{a+b\choose i}+\sum_{i={(a+b)\over2}}^{a+b}{a+b\choose i} \]

前面可以暴力地用扩展卢卡斯定理求,后面的就是 \(2^{a+b-1}\)。时间复杂度 \(O((a-b)\log^2a+5^k+2^k)\)

代码

这里只给出部分代码。

int C(ll n, ll m, int p, int pp, bool o){ll k = 0; if(n < m)return 0;for(ll i = n; i; i /= p)k += i / p;for(ll i = m; i; i /= p)k -= i / p;for(ll i = n - m; i; i /= p)k -= i / p;if(p == 2 and o)--k;if(k >= K)return 0;int t = 1ll * Fac(n, p, pp) * Inv(Fac(m, p, pp), pp) % pp * Inv(Fac(n - m, p, pp), pp) % pp * qmi(p, k, pp) % pp;if(p == 5 and o)t = 1ll * t * Inv(2, pp) % pp;return t;
}
int exLucas(ll n, ll m, bool o){for(int i = 1; i <= cnt; ++i)r[i] = C(n, m, p[i], pp[i], o);return crt();
}signed main(){cnt = 2; fac[0][0] = fac[1][0] = 1;pp[0] = 512; pp[1] = 1953125; p[0] = 2, p[1] = 5;for(int q = 0; q < 2; ++q)for(int i = 1; i <= pp[q]; ++i){fac[q][i] = fac[q][i - 1];if(i % p[q])fac[q][i] = 1ll * fac[q][i] * i % pp[q];}while(scanf("%lld %lld %lld", &n, &m, &K) ^ EOF){mod = qmi(10, K, 1e9 + 7);pp[1] = qmi(p[1] = 2, K, 1e9 + 5);pp[2] = qmi(p[2] = 5, K, 1e9 + 5);ll ans;if(n == m)ans = (qmi(2, n + m - 1, mod) - exLucas(n + m, n, 1) + mod) % mod;else{ans = qmi(2, n + m - 1, mod);for(ll i = (n + m) / 2 + 1; i < n; ++i)ans = (ans + exLucas(n + m, i, 0)) % mod;if((n + m) % 2 == 0)ans = (ans + exLucas(n + m, n + m >> 1, 1)) % mod;}while(ans < mod / 10)putchar('0'), mod /= 10;printf("%lld\n", ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900015.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学嵌入式C语言,看这一篇就够了(5)

C语言的运算符 学习编程语言,应该遵循“字-->词-->句-->段--->章”,对于一条有意义的语句而言,是离不开标点符号的运算符指明要进行的运算和操作,操作数是指运算符的操作对象,根据运算符操作数的数目不同,C语言标准把运算符分为三种:单目运算符(一元运算符…

20242313 2024-2025-2 《Python程序设计》实验一报告

20242313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2423 姓名:曾海鹏 学号:20242313 实验教师:王志强 实验日期:2025年3月16日 必修/选修:公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并…

nn.Embedding()函数详解

nn.Embedding()函数详解 nn.Embedding()函数:随机初始化词向量,词向量在正态分布N(0,1)中随机取值 输入: torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None) num…

htb Authority

端口扫描 nmap -sC -sV -p- -Pn -T4 10.10.11.222 Starting Nmap 7.92 ( https://nmap.org ) at 2024-10-04 19:42 CST Nmap scan report for 10.10.11.222 (10.10.11.222) Host is up (0.40s latency). Not shown: 65506 closed tcp ports (reset) PORT STATE SERVICE …

蓝桥杯14届省B

蓝桥杯14届省赛B组A:int a[105]; int day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//记录每个月有多少天 set<int> st;//记录不重复的日期void check(int mm,int dd){if (mm>12||mm<1||dd<1||dd>day[mm]) return;else st.insert(mm*100+dd);//st存日期 …

docker 安装 oracle database 问题记录

pre本地docker (WSL)安装运行 Oracle1. 镜像处理参考链接:https://www.cnblogs.com/wuchangsoft/p/18344847 oracle 镜像获取:https://container-registry.oracle.com/ords/f?p=113:10:::::: (Oracle官网,由于部分问题导致直接pull无法拉取) 阿里云,参考链接里有个个人19…

20242103 实验一《Python程序设计》实验报告

20242103 《Python程序设计》实验1报告 课程:《Python程序设计》 班级: 2421 姓名: 李雨虓 学号:20242103 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容: 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试…

20241313 2024-2025-2 《Python程序设计》实验一报告

20241313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2413 姓名: 刘鸣宇 学号:20241313 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

mutatingwebhook的简单实例

一. k8s集群准备 这里不再赘述k8s集群搭建。主要注意参数:kubectl get po kube-apiserver-server -n kube-system -o yaml | grep plugin 预期结果为:- --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook 至少要拥有两个参数…

Tauri新手向 - 基于LSB隐写的shellcode加载器

此篇是记录自己初次学习tauri开发工具,包含遇到的一些问题以及基本的知识,也给想上手rust tauri的师傅们一些小小的参考。此项目为保持免杀性暂不开源,希望各位师傅多多支持,反响可以的话后续会放出代码大家一起交流学习。ShadowMeld - 基于图像隐写技术的载荷生成框架 通过…