当前位置: 首页 > news >正文

CodeForces 711E ZS and The Birthday Paradox

抽屉原理,快速幂,逆元,概率。

如果$k > {2^n}$,根据抽屉原理可知,答案就是$1$ $1$。

否则概率一定小于$1$,就要计算,公式很简单,上过概率论的应该都会算。

概率为:$1 - \frac{{({2^n} - 0)*({2^n} - 1)*({2^n} - 2)*({2^n} - 3)*......*({2^n} - (k - 1))}}{{{2^{nk}}}}$ $ = 1 - \frac{{({2^n} - 1)*({2^n} - 2)*({2^n} - 3)*......*({2^n} - (k - 1))}}{{{2^{n(k - 1)}}}}$。

下面我们来计算这一部分:$\frac{{({2^n} - 1)*({2^n} - 2)*({2^n} - 3)*......*({2^n} - (k - 1))}}{{{2^{n(k - 1)}}}}$。

因为分母是$2$的幂次,所以分子和分母的$GCD$肯定是$2$的幂次。设$GCD={2^{tmp}}$。$tmp$的求法很简单,就是$1,2,3,4,5,...,k-1$这些数能被$2$整除的次数之和。

然后我们要将分子分母同时除以${2^{tmp}}$,可以转化为$×{2^{tmp}}$的逆元。

这个时候又遇到了一个难题:分子的项这么多,怎么求?

仔细思考一下会发现,分子是连续的$k-1$个数字相乘,如果$k-1>=mod$,根据抽屉原理可知,分子中必然有一个数字是$mod$的倍数。

也就是说,如果$k-1>=mod$,那么分子取模之后就是$0$;如果$k-1<mod$,那么暴力循环一遍算出分子就可以了。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-8;
void File()
{
    freopen("D:\\in.txt","r",stdin);
    freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
    char c = getchar(); x = 0;while(!isdigit(c)) c = getchar();
    while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar();  }
}

LL mod=1e6+3,pmod=mod-1;
LL n,k;

LL extend_gcd(LL a,LL b,LL &x,LL &y)
{
    if(a==0&&b==0) return -1;
    if(b==0){x=1;y=0;return a;}
    LL d=extend_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

LL mod_reverse(LL a,LL p)
{
    LL x,y;
    LL d=extend_gcd(a,p,x,y);
    if(d==1) return (x%p+p)%p;
    else return -1;
}

LL POW(LL a, LL b)
{
    LL ans = 1; a %= mod;
    while(b)
    {
        if(b & 1) ans = ans * a % mod, b--;
        b >>= 1; a = a * a % mod;
    }
    return ans;
}

int main()
{
    scanf("%lld%lld",&n,&k);
    LL u=1; bool flag=0;
    for(LL i=1;i<=n;i++)
    {
        u=u*(LL)2;
        if(k<=u) { flag=1; break; }
    }
    if(flag==0) printf("1 1\n");
    else
    {
        LL fz,fm;
        LL h=(n%pmod)*(((k%pmod)-1+pmod)%pmod)%pmod+pmod;
        fm=POW((LL)2,h);
        LL tmp=0; for(LL i=2;i<=k-1;i=i*2) tmp=tmp+(k-1)/i;
        LL GCD=POW((LL)2,tmp);
        LL NI=mod_reverse(GCD,mod);
        fm=fm*NI%mod;
        if(k-1>=mod) printf("%lld %lld\n",fm,fm);
        else
        {
            fz=1; for(LL i=1;i<=k-1;i++) fz=fz*((POW((LL)2,n)-i+mod)%mod)%mod;
            fz=fz*NI%mod;
            fz=(fm-fz+mod)%mod;
            printf("%lld %lld\n",fz,fm);
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/zufezzt/p/5826765.html

相关文章:

  • 深入理解javascript中的动态集合——NodeList、HTMLCollection和NamedNodeMap
  • linux把日志发送到日志服务器上
  • 缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout
  • [20160902]rm -rf的惨案.txt
  • Xposed模块的开发
  • 使用 @font-face
  • 格式与布局定位
  • 一步步来配置安卓开发环境ADTBundle
  • 基础知识整理-1
  • JavaScript之apply()和call()的区别
  • javascript 常用技巧
  • 自定义Spark Partitioner提升es-hadoop Bulk效率
  • 权限及权限管理
  • activemq安全设置 设置admin的用户名和密码
  • 全局CSS设置
  • 【个人向】《HTTP图解》阅后小结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Golang-长连接-状态推送
  • JS数组方法汇总
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • use Google search engine
  • Vue.js 移动端适配之 vw 解决方案
  • Vue.js-Day01
  • Vue--数据传输
  • Web设计流程优化:网页效果图设计新思路
  • 关于Flux,Vuex,Redux的思考
  • 记一次和乔布斯合作最难忘的经历
  • 技术:超级实用的电脑小技巧
  • 解析带emoji和链接的聊天系统消息
  • 聊聊directory traversal attack
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一天一个设计模式之JS实现——适配器模式
  • 原生Ajax
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 整理一些计算机基础知识!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ![CDATA[ ]] 是什么东东
  • #### go map 底层结构 ####
  • #Z0458. 树的中心2
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第61天)多租户架构(CDB/PDB)
  • (分布式缓存)Redis分片集群
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)3D模板阴影原理
  • (转)GCC在C语言中内嵌汇编 asm __volatile__