[JZOJ 5810] 简单的玄学
思路:
就是考虑一个结论
对于\(1<=x<=2^n\),那么\(x\)与\(2^n - x\)中的2的个数相等。
证明:
我们将\(x\)表示成\(2^k*b\),那么\(2^n - x\)就是\(2^n - 2^k*b\)当消去\(k\)个2之后,剩下的就是\(2^n - b\)显然不能被2除了(因为b显然不是一个偶数),
那么我们推出来的概率式子为:
\(1 - {\prod_{i=2^n-m+1}^{2^n-1} i\over 2^{n(m-1)}}\)
问题的瓶颈就是如何求分子的2的个数,应用上面的结论可以将分子化为:
如何求\((m-1)!\)里的2的个数。
简单了,随便枚举一下就可以了。
值得一提的是,这题的数据范围有毒,考虑到当\(m > mod\)时,显然取模为0,所以出题人很好心的没有给\(10^{18}\)的点。
代码我不知道为什么老是爆炸...
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1e6+3;
inline ll pow_mod(ll a,ll b) {
ll res = 1;
while(b) {
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
ll n,m;
ll ans;
int main () {
freopen("random.in","r",stdin);
freopen("random.out","w",stdout);
scanf("%d %d",&n,&m);
if(m > mod) {
puts("0 0");
return 0;
}
if(log2(m) > n) {
puts("1 1");
return 0;
}
ll t1 = pow_mod(2,n);
ll t2 = pow_mod(t1,m-1);
for(int i = 1;i < m; ++i) {
int tmp = i;
while(!(tmp & 1)) {
ans ++;
tmp >>= 1;
}
}
ll fz = 1;
for(int i = 1;i < m; ++i) {
fz = fz * (t1 - i);
}
fz /= pow(2,ans);
ll fm = pow_mod(2,n*(m - 1) - ans);
printf("%lld %lld\n",(fm - fz)%mod,(fm)%mod);
return 0;
}
马力太弱。。
[JZOJ 5810] 简单的玄学的更多相关文章
- NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...
- noip模拟12[简单的区间·简单的玄学·简单的填数]
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...
- [CSP-S模拟测试]:简单的玄学(数学)
题目描述 有$m$个在$[0,2^n)$内均匀随机取值的整型变量,球至少有两个变量取值相同的概率.为了避免精度误差,假设你的答案可以表示成$\frac{a}{b}$的形式,(其中$(a,b)=1$), ...
- [JZOJ 5811] 简单的填数
题意:自己搜吧... 思路: 记二元组\((x,l)\)表示当前为\(x\)且之前有\(l\)个连续数与\(x\)相同. 并且维护up和low数组表示取到最大/最小值时,连续序列的长度. 正一遍,反一 ...
- [JZOJ 5807] 简单的区间
题目: 求有多少组二元组\((l,r)\)使得:\(1<=l<=r<=n,k|f(l,r)\) \(f(l,r) = \sum_{i=l}^{r}a_i - max_{i=l}^{r ...
- [JZOJ 5804] 简单的序列
思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...
- NOIP 模拟 $12\; \text{简单的玄学}$
题解 有些难度 对于 \(30pts\) 直接暴力 对于 \(70pts\) 发现规律 \(2^n-a\) 与 \(a\;\;(a\in [1,2^n))\) 分解质因数后,\(2\) 的次数相同 \ ...
- 又联考了一场,感觉自己好菜啊,T2推出了公式但是不会逆元QAQ,难受啊!!!不过都确实是一道逆元的好题撒!
简单的玄学(random) 题目描述: 样例输入: 样例1: 3 2 样例2: 1 3 样例3: 4 3 样例输出: 样例1: 1 8 样例2: 1 1 样例3: 23 128 提示: 时间限制:10 ...
- [NOIP模拟测试37]反思+题解
一定要分析清楚复杂度再打!!!窝再也不要花2h20min用暴力对拍暴力啦!!! 雨露均沾(滑稽),尽量避免孤注一掷.先把暴力分拿全再回来刚正解. 即使剩下的时间不多了也优先考虑认真读题+打暴力而非乱搞 ...
随机推荐
- python补充4
一 如何判断一个对象是不是函数类型 #方法一def func(arg): if callable(arg): print("是函数"+arg()) else: print(arg) ...
- 「ZJOI2019」语言 解题报告
「ZJOI2019」语言 3个\(\log\)做法比较简单,但是写起来还是有点麻烦的. 大概就是树剖把链划分为\(\log\)段,然后任意两段可以组成一个矩形,就是个矩形面积并,听说卡卡就过去了. 好 ...
- HBase与Sqoop集成案例
HBase与Sqoop集成 案例:将RDBMS中的数据抽取到HBase中 Step1.配置sqoop-env.sh如下: Step2.在Mysql中创建一张数据库library,一张表book CRE ...
- BZOJ 2326: [HNOI2011]数学作业(矩阵乘法)
传送门 解题思路 NOIp前看到的一道题,当时想了很久没想出来,NOIp后拿出来看竟然想出来了.注意到有递推\(f[i]=f[i-1]*poww[i]+i\),\(f[i]\)表示\(1-i\)连接起 ...
- PHP中关于Phar的学习
什么是phar 一个PHP程序往往是由多个文件组成的,如果能够集中为一个文件来分发和运行是很方便的.phar便应运而生.大概跟java的jar文件是差不多类似的.但是php的phar文件是可以由php ...
- springboot入门级笔记
springboot亮点:不用配置tomcat springboot不支持jsp 准备:配置jdk 配置maven 访问https://start.spring.io/ 并生成自己的springboo ...
- ICPC Asia Nanning 2017 F. The Chosen One (高精度运算)
题目链接:The Chosen One 比赛链接:ICPC Asia Nanning 2017 题意 \(t\) 组样例,每组给出一个整数 \(n(2\le n\le 10^{50})\),求不大于 ...
- leetcode 596 BUG笔记
There is a table courses with columns: student and class Please list out all classes which have more ...
- Delphi(ObjectPascal)基础语法
一个程序分为两个部分:1.程序首部:program 来标识这是一个pascal程序 后面的是可执行文件的名称程序名称2.程序体:说明部分:数据先定义后使用执行部分:以begin开始,以end结束 ...
- 待办消息查询sql
select tsm.TMsgID,tsm.TMID,tsm.FNRID,tm.MainComID, tsm.TMsgName,fb.FBDataTbale, tsm.REMARK,fb.FlowTy ...