LGP3726题解
确实牛逼。。。。。。这个转化我反正肯定想不到。。。
考虑 \(a=b\) 的情况。发现出了平局之外都是一半赢一半输。可以得到此时的答案为:
\]
后面是范德蒙德卷积,可以得到答案是 \(\frac{2^{a+b}-\binom{2a}{a}}{2}\)。
接下来考虑 \(a\neq b\)。前面的情况相当于是考虑将一个赢的方案和输的方案配对,所以我们考虑这个问题的时候也考虑将赢的方案和输的方案配对。
设能够配对的方案数为 \(q\),不能够配对的方案数为 \(p\),容易发现不能够配对的方案数一定是小 A 能够胜利的方案数。
答案就是 \(p+\frac{q}{2}\)。
只要能够计算出其中一个就可以了。考虑计算不能配对的方案数。
设 \(x\) 为小 A 的方案中硬币朝上的次数,\(y\) 为小 B 的方案中硬币朝上的次数。
如果一个方案不能配对必定满足 \(x>y\) 和 \(a-x>b-y\),即 \(a-b>x-y\)。于是我们可以枚举这个 \(x-y\):
\]
\]
\]
\]
使用 exLucas 计算即可。
需要注意的是最后要除以一个 \(2\),把模数乘上二,最后直接除以一个 \(2\) 即可。
#include<functional>
#include<cstdio>
using std::function;
typedef unsigned ui;
typedef __uint128_t LL;
typedef unsigned long long ull;
const ui pw2[11]={1,2,4,8,16,32,64,128,256,512,1024};
const ui pw5[11]={1,5,25,125,625,3125,15625,78125,390625,1953125,9765625};
const ui pw10[11]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
struct Barrett{
	ull m,b;
	Barrett(const ui&m=1):m(m),b(((LL(1)<<64)+m-1)/m){}
	friend inline ull operator%(const ull&a,const Barrett&mod){
		return a-mod.m*(LL(mod.b)*a>>64);
	}
};
inline void exgcd(const ui&a,const ui&b,int&x,int&y){
	if(!b)return x=1,y=0,void();exgcd(b,a%b,y,x);y-=ui(a/b)*x;
}
inline ui inv(const ui&n,const ui&mod){
	int x,y;exgcd(n,mod,x,y);return x<0?x+mod:x>=mod?x-mod:x;
}
inline ui pow(ui a,ull b,const Barrett&mod){
	ui ans(1);for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;return ans;
}
inline ui pow(ui a,ull b,const ui mod){
	ui ans(1);for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;return ans;
}
struct exLucas{
	Barrett p,mod;
	ui P,MOD,fac[1953126];
	inline void init(const ui&tp,const ui&tmod){
		fac[0]=1;p=Barrett(P=tp);mod=Barrett(MOD=tmod);
		for(ui i=1,j=1;i<=MOD;++i,++j,j*=j!=P)fac[i]=1ull*fac[i-1]*(j?i:1)%mod;
	}
	inline ull g(const ull&n){
		ull pk(P),ans(0);while(pk<=n)ans+=n/pk,pk*=P;return ans;
	}
	inline ui f(const ull&n){
		return n?1ull*f(n/P)*pow(fac[MOD],n/MOD,mod)%mod*fac[n%mod]%mod:1;
	}
	inline ui operator()(const ull&n,const ull&m){
		ui c=pow(P,g(n)-g(m)-g(n-m),mod);
		return c?1ull*f(n)*inv(f(m),MOD)%mod*inv(f(n-m),MOD)%mod*c%mod:0;
	}
}C2,C5;
inline ui Solve(const ull&a,const ull&b,const ui&k){
	const ui&mod2=pw2[k+1],&mod5=pw5[k],&mod=mod2*mod5;
	ui ans(0);C2.init(2,mod2);C5.init(5,mod5);
	function<ui(const ull&,const ull&)>
	C=[&](const ull&n,const ull&m){
		return 1ull*(1ull*C2(n,m)*inv(mod5,mod2)%mod*mod5+1ull*C5(n,m)*inv(mod2,mod5)%mod*mod2)%mod;
	};
	if(a==b)return(pow(2,a+b,mod)+mod-C(a+b,a))/2%pow(10,k,2e9);
	for(ui i=1;i<a-b;++i)ans=(ans+C(a+b,b+i))%mod;
	return(pow(2,a+b,mod)+ans)/2%pow(10,k,2e9);
}
inline void write(const ui&n,const ui&k){
	for(ui i=k-1;i<k;--i)printf("%u",n/pw10[i]%10);printf("\n");
}
signed main(){
	ull a,b;ui k;
	while(~scanf("%llu%llu%u",&a,&b,&k))write(Solve(a,b,k),k);
}
LGP3726题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
		我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ... 
- noip2016十连测题解
		以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ... 
- BZOJ-2561-最小生成树 题解(最小割)
		2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ... 
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
		Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ... 
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
		题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ... 
- 2016ACM青岛区域赛题解
		A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ... 
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
		http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ... 
- 网络流n题 题解
		学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ... 
- CF100965C题解..
		求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ... 
随机推荐
- HTML笔记整理--下节
			欢迎来到HTML基础笔记下节部分! 内联样式 当特殊的样式需要应用到个别元素时,就可以使用内联样式. 使用内联样式的方法是在相关的标签中使用样式属性.样式属性可以包含任何 CSS 属性.以下实例显示出 ... 
- 从Spring容器的角度理解Dubbo扩展点的加载时机
			对于Dubbo提供的扩展点,主程序执行的过程中并没有显示调用加载的过程,无论是自激活的Filter还是自适应的ThreadPool.那么这样的扩展点在程序运行的哪个节点调用的呢?跟踪之前性能监控扩展点 ... 
- Spring MVC拦截器(Interceptor)使用
			第一篇Spring MVC的小作文就是关于Interceptor的,而不是很多基础的东西呢,很无奈.因为实践的项目中用到了,用地不太好,导致重复跳转页面浏览器cookie溢出了. 这个过程中呢就将与I ... 
- pytest--配置用例执行顺序(pytest_ordering插件介绍)
			前言 设置测试用例执行顺序: 默认情况下,pytest测试用例的执行顺序是按先外层后内层(目录下的文 件),再根据名称按ascii码值的顺序升序执行. 如果想自定义pytest测试用例的执行顺序,可以 ... 
- python-利用xlrd模块中读取有合并单元格的excel数据
			前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ... 
- java宝典笔记(一)
			第四章java基础知识 4.1基本概念 一.java优点 1.面向对象(封装.继承.多态) 2.可移植性.平台无关,一次编译,到处运行.Windows,Linux,macos等.java为解释性语言, ... 
- 攻防世界Web_python_template_injection
			题目: 就一句话啥也没有.python 模板注入.刚学菜鸡还不知道python模板有哪些注入漏洞,上网查一下.又学到一个知识点. python常用的web 模板有 Django,Jinja2,Torn ... 
- nessus安装破解
			Nessus2.0-20211012插件包 Nessus-8.15.2-x64.msi 0x01 Nessus更新介绍 Nessus下载地址 1https://www.tenable.com/down ... 
- SaaS平台是什么,为什么字节、腾讯等大厂都在抢相关人才
			SaaS平台很多人可能没听说是什么,但是从事TO B公司的员工来说,SaaS平台应该都有所耳闻.从2016年开始,腾讯开始发力TO B算起,到处在挖TO B公司的骨干人才,而熟悉SaaS平台的人才竞 ... 
- C语言字符串输入输出函数(gets()函数、puts()函数、fgets()函数、fputs()函数)
			scanf("%s", str) 不能读取空白字符,遇到第一个空白字符就停止读取. gets(str) 读取整行输入,直至遇到换行符,丢弃换行符储存其余字符,并在末尾添加 \0.与 ... 
