AT2705 Yes or No(组合数学)
解题思路
首先将这个模型放到坐标轴上,\(x\)轴表示\(1\),\(y\)轴表示\(0\)。问题就转化成了从\((0,0)\)走到\((n,m)\),每次可以猜测向\(x\)轴或向\(y\)轴,而实际也有一条路线,求猜中的个数的期望。假设\(n<m\)首先如果一直猜\(m\),答案必然为\(m\),那么这是答案的下界。再考虑过\((n,m)\)做一条斜率为\(1\)的直线,如果在直线上,那么猜中的概率其实就为\(\frac{1}{2}\)。,而不在坐标轴上猜中的期望其实就为\(m\)。那么现在就是求走到直线的概率,根据期望的线性,可以考虑直线上每一个点产生的贡献,过这个点的路线就可以用组合数轻松算出了。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1000005;
const int MOD=998244353;
typedef long long LL;
int n,m,fac[N],inv[N];
int Ans1,Ans2;
//LL gcd(LL x,LL y) {
// if(!y) return x;
// return gcd(y,x%y);
//}
//
//struct Data{
// LL x,y;
// Data(LL _x=0,LL _y=0) {x=_x; y=_y;}
// friend Data operator+(const Data A,const Data B){
// Data ret; ret.y=A.y*B.y; ret.x=A.x*B.y+A.y*B.x;
// LL tmp=gcd(ret.x,ret.y); ret.x/=tmp; ret.y/=tmp;
// return ret;
// }
// friend Data operator*(const Data A,const Data B){
// Data ret; ret.x=A.x*B.x; ret.y=A.y*B.y;
// LL tmp=gcd(ret.x,ret.y); ret.x/=tmp; ret.y/=tmp;
// return ret;
// }
//}ans;
inline int fast_pow(int x,int y){
int ret=1;
for(;y;y>>=1){
if(y&1) ret=(LL)ret*x%MOD;
x=(LL)x*x%MOD;
}
return ret;
}
inline int C(int x,int y){
return (LL)fac[x]*inv[y]%MOD*inv[x-y]%MOD;
}
int main(){
scanf("%d%d",&n,&m);
if(n>m) swap(n,m); fac[0]=inv[0]=1;
for(int i=1;i<=n+m;i++) fac[i]=1ll*fac[i-1]*i%MOD;
inv[n+m]=fast_pow(fac[n+m],MOD-2);
for(int i=n+m-1;~i;i--) inv[i]=1ll*inv[i+1]*(i+1)%MOD;
Ans1=1ll*2*m*C(n+m,n)%MOD; Ans2=fast_pow(C(n+m,n)*2%MOD,MOD-2);
for(int i=1;i<=n;i++) {
Ans1=Ans1+1ll*C(n-i+m-i,n-i)*C(i+i,i)%MOD;
Ans1%=MOD;
}
printf("%lld\n",1ll*Ans1*Ans2%MOD);
// ans=ans+Data(1,2)*Data(C(n-i+m-i,n-i)*C(i+i,i),C(n+m,n));
// printf("%lld\n",1ll*ans.x*fast_pow(ans.y,MOD-2)%MOD);
return 0;
}
AT2705 Yes or No(组合数学)的更多相关文章
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
- 组合数学or not ---- n选k有重
模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...
- 组合数学(全排列)+DFS CSU 1563 Lexicography
题目传送门 /* 题意:求第K个全排列 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 摘抄网上的解法如下: 假设第一位是a,不论a是什么数,axxxxxxxx一共有 ...
- uestc1888 Birthday Party 组合数学,乘法原理
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25539#problem/G 题目意思: 有n个人,每个人有一个礼物,每个人能拿 ...
- UVA 11076 Add Again 计算对答案的贡献+组合数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- POJ3252——Round Number(组合数学)
Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...
- HDU4675【GCD of scequence】【组合数学、费马小定理、取模】
看题解一开始还有地方不理解,果然是我的组合数学思维比较差 然后理解了之后自己敲了一个果断TLE.... 我以后果然还得多练啊 好巧妙的思路啊 知识1: 对于除法取模还需要用到费马小定理: a ^ (p ...
- hdu 4810 Wall Painting (组合数学+二进制)
题目链接 下午比赛的时候没有想出来,其实就是int型的数分为30个位,然后按照位来排列枚举. 题意:求n个数里面,取i个数异或的所有组合的和,i取1~n 分析: 将n个数拆成30位2进制,由于每个二进 ...
- CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
随机推荐
- java c 标签的使用
头部需要引入: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 需要 ...
- 生日蛋糕(dfs+剪枝)
生日蛋糕 POJ - 1190 题目: 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M) ...
- window.location.href后携带参数
JS文件中: window.location.href后可携带参数,但是不安全,虽然在技术上是可以实现的 1.传参:window.location.href = "RecordCare.as ...
- Windows下通过GitHub+Hexo搭建个人博客的步骤
Windows下通过GitHub+Hexo搭建个人博客的步骤 https://blog.csdn.net/namechenfl/article/details/90442312 https://bl ...
- [Codeforces 163D]Large Refrigerator (DFS+剪枝)
[Codeforces 163D]Large Refrigerator (DFS+剪枝) 题面 已知一个长方体的体积为V,三边长a,b,c均为正整数,求长方体的最小表面积S V以质因数分解的形式给出 ...
- Yii框架怎么寻找对应视图
render()内容; public function render($view,$data=null,$return=false) { if($this->beforeRender($view ...
- CodeChef 3-Palindromes(Manacher+dp)
3-Palindromes Problem code: PALIN3 Submit All Submissions All submissions for this problem are ...
- D Dandan's lunch
链接:https://ac.nowcoder.com/acm/contest/338/D来源:牛客网 题目描述 As everyone knows, there are now n people pa ...
- jquery+ajax获取本地json对应数据
首先,记得导入jquery.js文件. json内容: var obj123=[ {"option":"2,3,9,14,19,24,32",&q ...
- ubuntu vim8.1编译安装
sudo apt-get install libncurses5-dev python-dev python3-dev libgtk-3-dev libatk1.0-dev libbonoboui2- ...