[CSP-S模拟测试]:简单的玄学(数学)
题目描述
有$m$个在$[0,2^n)$内均匀随机取值的整型变量,球至少有两个变量取值相同的概率。
为了避免精度误差,假设你的答案可以表示成$\frac{a}{b}$的形式,(其中$(a,b)=1$),你需要输出$a$和$b$对${10}^6+3$取模后的值。
输入格式
第一行两个正整数$n,m$。
输出格式
一行两个整数,它们的含义如题所述。
样例
样例输入1:
3 2
样例输出1:
1 8
样例输入2:
1 3
样例输出2:
1 1
样例输入3:
4 3
样例输出3:
23 128
数据范围与提示
对于$10\%$的数据,$nm<16$;
对于$30\%$的数据,$nm<64$;
对于$50\%$的数据,$nm\leqslant {10}^3$;
对于$70\%$的数据,$m\leqslant {10}^6$;
对于$100\%$的数据,$1\leqslant n\leqslant {10}^{18},2\leqslant m\leqslant {10}^{18}$。
题解
数学题就要推式子。
显然这个概率就是$\dfrac{A_{2^2}^m}{2^{nm}}$,也就是$\dfrac{\prod \limits_{i=2^n-m+1}^{2^n-1}}{2^{n(m-1)}}$。
看起来很恐怖,其实如果$m>{10}^6+3$那么在连乘的过程中肯定会有其中一项是$0$,那么结果就是$0$。
但是我们要输出$gcd(a,b)=1$的分子和分母,所以我们还得约分……
发现我们只能约分出来$2$和$2$的倍数,所以我们考虑如何求出来有多少个$2$。
考虑$a$中$2$的个数和$2^n-a$中$2$的个数相同,所以我们只需要求出$(m-1)!$中$2$的个数即可,可以用一种类似快速幂的思想在$\Theta(\log m)$的时间复杂度内求出,然后约掉这些$2$就是最简分数啦。
时间复杂度:$\Theta(m)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long fz,fm;
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%1000003;
x=x*x%1000003;
y>>=1;
}
return res;
}
int main()
{
scanf("%lld%lld",&n,&m);
n%=1000002;
int flag=65;
long long pos=1,fj=0;
while(flag--)
{
pos<<=1;
if(pos>=m)break;
fj=(fj+(m-1)/pos)%1000002;
}
long long inv=qpow(qpow(2,fj),1000001);
long long C=qpow(2,n);
fm=qpow(C,(m-1)%1000002)*inv%1000003;
if(m<=1000003)
{
fz=inv;
for(int i=1;i<m;i++)
fz=fz*(C-i+1000003)%1000003;
fz=(fm-fz+1000003)%1000003;
printf("%lld %lld",fz,fm);
}
else printf("%lld %lld",fm,fm);
return 0;
}
rp++
[CSP-S模拟测试]:简单的玄学(数学)的更多相关文章
- [CSP-S模拟测试]:简单计算(数学)
题目传送门(内部题104) 输入格式 第一行一个正整数$T$,表示该测试点内的数据组数,你需要对该测试点内的$T$组数据都分别给出正确的答案才能获得该测试点的分数. 接下来$T$组数据,每组数据一行两 ...
- [CSP-S模拟测试]:题(DP+数学)
题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...
- [CSP-S模拟测试]:B(DP+数学)
题目传送门(内部题45) 输入格式 第一行$3$个整数$n,m,P$.第二行$m$个整数,表示$m$次询问. 输出格式 一行$m$个整数表示答案. 样例 样例输入1: 2 4 40 1 2 3 样例输 ...
- [CSP-S模拟测试]:简单的括号序列(组合数)
题目传送门(内部题82) 输入格式 一行一个字符串$ss$,保证$ss$中只包含$'('$和$')'$. 输出格式 一行一个整数,表示满足要求的子序列数对$10^9+7$的结果. 样例 样例输入1: ...
- [CSP-S模拟测试]:C(倍增+数学)
题目传送门(内部题152) 输入格式 第一行两个整数$N,Q$. 接下来一行$N$个整数,第$i$个为$a_i$. 接下来的$N-1$行,每行两个整数$u,v$.表示$u,v$之间有一条边. 接下来的 ...
- [CSP-S模拟测试]:物理课(数学)
题目传送门(内部题144) 输入格式 从$physics.in$读入数据. 第一行一个数$T$,代表有$T$组数据.接下来$T$行每行$4$个浮点数,分别为$\theta,v,d,g$,保留到小数点后 ...
- [CSP-S模拟测试]:最大或(数学)
题目传送门(内部题141) 输入格式 输入文件包含多组测试数据,第一行为一个正整数$T$,表示数据组数. 接下来$T$行,每行两个正整数$l,r$.数据保证$l\leqslant r$成立. 输出格式 ...
- [CSP-S模拟测试]:平方数(数学+哈希)
题目传送门(内部题137) 输入格式 第一行,一个正整数$n$. 第二行$n$个正整数$a_1\sim a_n$. 输出格式 输出一个整数,为满足条件的二元组个数. 样例 样例输入: 51 2 3 4 ...
- [CSP-S模拟测试]:异或(数学)
题目描述 给定$L,R$,我们希望你求出:$$\sum\limits_{i=L}^R\sum\limits_{j=L}^R(i\oplus j)$$其中这里的$\oplus$表示异或运算.答案对$10 ...
随机推荐
- 如何保留小数点后N位?
2014年10月17日09:48:39 在做项目中遇到的,要把想显示的数据进行规定小数位的保留,下面写一下用过的方法: 1. BigDecimal 方法(我做项目的时候用的方法) 代码: java.m ...
- Jmeter登录中的cookie问题
Jmeter中发送多个http请求,由于后面的请求需要登录后才能获取到数据,所以前面先要发送登录请求. 登录时会写cookie到本地,后面的请求中会读取cookie中的JSESSIONID,若后面的请 ...
- Junit简单使用
上篇文章也说到了,接口测试我使用的是Junit框架.因为我还是刚刚接触,也还没有深入了解,主要学会了断言的使用.断言是对测试运行结果的判断,如果结果符合要求,程序就会继续执行下去.反之,如果结果和预计 ...
- Jmeter接口测试加解密及Bean Shell使用案例
Jmeter接口测试加解密及Bean Shell使用案例 https://blog.csdn.net/russ44/article/details/56009084 本文以base64加解密为例: 一 ...
- ThreadLocal相关
转自:http://blog.csdn.net/lufeng20/article/details/24314381 ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.T ...
- spring, spring mvc, mybatis整合文件配置详解
转自:http://www.cnblogs.com/wxisme/p/4924561.html 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用 ...
- CentOS7版本中locate: 未找到命令,详细解决方案
在学习Linux(CentOS7)文件搜索命令:locate 时,遇到错误“locate: 未找到命令”. 原因:CentOS7默认没有安装该命令 解决方案: 1.安装"locate&quo ...
- StarUml3.10 Mac 注册key 破解
/Applications/StarUML.app/Contents/Resources StarUML是用nodejs写的.确切的说是用Electron前端框架写的.新版本中所有的starUML源代 ...
- js中获取input中所输入的值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ajax跨域请求,状态码200,F12控制台报错
在接口的地方加上请求头.//跨域请求header('Access-Control-Allow-Origin:*'); 不要在ajax里面加!!!!!!!!!