传送门

数学真的太优秀了Orz

数据真的太优秀了Orz

题目描述

小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍。最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习。但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生。勤勉的小 A 为了劝说小 B 早日脱坑,认真学习,决定以抛硬币的形式让小 B 明白他是一个彻彻底底的非洲人,从而对这个游戏绝望。两个人同时抛 b 次硬币,如果小 A 的正面朝上的次数大于小 B 正面朝上的次数,则小 A 获胜。

但事实上,小 A 也曾经沉迷过拉拉游戏,而且他一次 UR 也没有抽到过,所以他对于自己的运气也没有太大把握。所以他决定在小 B 没注意的时候作弊,悄悄地多抛几次硬币,当然,为了不让小 B 怀疑,他不会抛太多次。现在小 A 想问你,在多少种可能的情况下,他能够胜过小 B 呢?由于答案可能太大,所以你只需要输出答案在十进制表示下的最后 k 位即可。

输入输出格式

输入格式:

有多组数据,对于每组数据输入三个数a,b,k,分别代表小A抛硬币的次数,小B抛硬币的次数,以及最终答案保留多少位整数。

输出格式:

对于每组数据,输出一个数,表示最终答案的最后 k 位为多少,若不足 k 位以 0 补全。

输入输出样例

输入样例#1:

2 1 9

3 2 1

输出样例#1:

000000004

6

说明

对于第一组数据,当小A抛2次硬币,小B抛1次硬币时,共有4种方案使得小A正面朝上的次数比小B多。

(01,0), (10,0), (11,0), (11,1)

对于第二组数据,当小A抛3次硬币,小B抛2次硬币时,共有16种方案使得小A正面朝上的次数比小B多。

(001,00), (010,00), (100,00), (011,00), (101,00), (110,00), (111,00), (011,01), (101,01), (110,01),(111,01), (011,10), (101,10), (110,10), (111,10), (111,11).

数据范围

题解

留坑qwq

code:

//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define R register
using namespace std;
typedef long long LL;
LL a,b,k,md,ans,K2,K5;
LL fac2[1050],fac5[2000000]; inline LL qpow(LL a,LL b,LL p) {
R LL ret=1;
while(b) {
if(b&1) ret=ret*a%p;
a=a*a%p; b>>=1;
}
return ret;
} void init() {
int M2=512,M5=1953125;
fac2[0]=fac5[0]=1;
for(R int i=1;i<=M2;i++)
fac2[i]=fac2[i-1]*((i&1)?i:1)%M2;
for(R int i=1;i<=M5;i++)
fac5[i]=fac5[i-1]*(i%5?i:1)%M5;
} inline void exgcd(LL a,LL b,LL &x,LL &y) {
if(!b) {x=1,y=0;return ;}
exgcd(b,a%b,x,y); LL tmp=x;
x=y; y=tmp-(a/b)*y;
} inline LL inv(LL a,LL p) {
LL x,y;
exgcd(a,p,x,y);
return (x>p?x%p:x);
} inline LL mul(LL x,int p,LL pk) {
if(!x) return 1; R LL res=0;
if(p&1) {res=qpow(fac5[pk],x/pk,pk)*fac5[x%pk]%pk;}
else {res=qpow(fac2[pk],x/pk,pk)*fac2[x%pk]%pk;}
return res*mul(x/p,p,pk)%pk;
} inline LL C(LL a,LL b,int p,LL pk,bool fl) {
if(a<b) return 0; LL tmp=0;
for(R LL i=a;i;i/=p) tmp+=i/p;
for(R LL i=b;i;i/=p) tmp-=i/p;
for(R LL i=a-b;i;i/=p) tmp-=i/p;
if(fl&&p==2) --tmp; if(tmp>=k) return 0;
LL s1=mul(a,p,pk),s2=mul(b,p,pk),s3=mul(a-b,p,pk);
R LL res=qpow(p,tmp,pk)*s1%pk*inv(s2,pk)%pk*inv(s3,pk)%pk;
if(fl&&p==5) res=res*inv(2,pk)%pk;
return res*(md/pk)%md*inv(md/pk,pk)%md;
} inline LL lucas(LL a,LL b,bool fl) {return (C(a,b,2,K2,fl)+C(a,b,5,K5,fl))%md;}
const LL INF=1e9+5;
int main() {
init();
while(~scanf("%lld%lld%lld",&a,&b,&k)) {
md=qpow(10,k,INF); ans=qpow(2,a+b-1,md);
K2=qpow(2,k,INF); K5=qpow(5,k,INF);
if(a==b) ans=(ans-lucas(a<<1,a,1)+md)%md;
else {
for(R LL i=(a+b)/2+1;i<a;i++) ans=(ans+lucas(a+b,i,0))%md;
if((a+b)%2==0) ans=(ans+lucas(a+b,(a+b)/2,1))%md;
}
while(ans<md/10) putchar('0'),md/=10;
printf("%lld\n",ans);
}
return 0;
}

[luogu3726 HNOI2017] 抛硬币 (拓展lucas)的更多相关文章

  1. bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]

    4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...

  2. 【BZOJ4830】[HNOI2017]抛硬币(组合计数,拓展卢卡斯定理)

    [BZOJ4830][HNOI2017]抛硬币(组合计数,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 暴力是啥? 枚举\(A\)的次数和\(B\)的次数,然后直接组合数算就好了:\(\display ...

  3. [AH2017/HNOI2017]抛硬币(扩展lucas)

    推式子+exlucas. 题意: 小 A 和小 B 是一对好朋友,两个人同时抛 b 次硬币,如果小 A 的正面朝上的次数大于小 B 正面朝上的次数,则小 A 获胜. 小 A 决定在小 B 没注意的时候 ...

  4. 【刷题】BZOJ 4830 [Hnoi2017]抛硬币

    Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A为 ...

  5. bzoj 4830: [Hnoi2017]抛硬币

    Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于**师手游,天天刷本,根本无心搞学习.但是 已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A ...

  6. [AH/HNOI2017]抛硬币

    题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...

  7. bzoj4830 hnoi2017 抛硬币

    题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...

  8. luogu P3726 [AH2017/HNOI2017]抛硬币

    传送门 我是真的弱,看题解都写了半天,,, 这题答案应该是\(\sum_{i=1}^{a}\binom{a}{i}\sum_{j=0}^{min(b,i-1)}\binom{b}{j}\) 上面那个式 ...

  9. [HNOI2017]抛硬币

    Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于××师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A为 ...

随机推荐

  1. Spring MVC-环境设置(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_environment_setup.htm 说明:示例基于Spring MVC 4 ...

  2. MVVM设计模式基础知识--ICommand接口

    命令是 Windows Presentation Foundation (WPF) 中的输入机制,它提供的输入处理比设备输入具有更高的语义级别. 命令有若干用途: 第一个用途是将语义以及调用命令的对象 ...

  3. 初探BurpSuite

    BurpSuite这套渗透软件.或者已经能够说是渗透攻击平台了吧,玩的好.确实非常方便. 就像是玩英雄联盟的ADC,一開始玩VN.感觉非常难上手,玩多了肯定会爱上VN(啊,貌似提到了什么奇怪的东西). ...

  4. 改你MB需求!

    改你MB需求! 原创 2015-12-08 尖峰视界 尖峰视界 我敏锐的觉察到,产品经理的头像開始闪动了.在0.1秒的时间内,我全身的血液都冲向了大脑.果然.右上角弹出了文件传输窗体. "最 ...

  5. WndProc函数参数列表

    protected override void WndProc(ref Message m) 实现了这一点. 重写WndProc函数,可以捕捉所有窗口发生的消息.这样,我们就可以"篡改&qu ...

  6. bzoj5178: [Jsoi2011]棒棒糖

    就是裸的主席树嘛... 表扬一下自己1A #include<cstdio> #include<iostream> #include<cstring> #includ ...

  7. 【Codeforces 258A】 Game With Sticks

    [题目链接] http://codeforces.com/contest/451/problem/A [算法] 若n和m中的最小值是奇数,则先手胜,否则后手胜 [代码] #include<bit ...

  8. html5之文件操作

    用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...

  9. springboot的推荐模板引擎-Thymeleaf

    1)添加对themeleaf的支持的依赖 <!--Thymeleaf--> <dependency> <groupId>org.springframework.bo ...

  10. HBase编程 API入门系列之delete.deleteColumn和delete.deleteColumns区别(客户端而言)(4)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. delete.deleteColumn和delete.deleteColumns区别是: deleteColumn是删除某一个列簇 ...