P7392 「TOCO Round 1」奇怪的排序 \color{green}{\texttt{P7392 「TOCO Round 1」奇怪的排序}} P7392 「TOCO Round 1」奇怪的排序

[Problem] \color{blue}{\texttt{[Problem]}} [Problem]

询问 n n n 个数的排列中有多少个排列满足执行了下列函数后变成有序。

[Solution] \color{blue}{\texttt{[Solution]}} [Solution]

首先,这个函数就是一个归并排序的模板,只是多了一个参数 k k k。很容易可以知道,这个 k k k 是用来限制递归次数的,即最多只能递归 ( k − 1 ) (k-1) (k−1) 次。

可以发现,递归树最底下一层其实是把原数列分成了 2 k 2^{k} 2k 个子序列。如果我们要满足最后有序,我们必须要保证最底下的那 2 k 2^{k} 2k 个子序列本身是有序的(因为归并的过程不改变原来子序列内部的顺序,只是把相邻两个子序列有序地合并了起来)。

设每个子序列内有 x x x 个数字,那么它本身就是升序的概率就是 1 x ! \dfrac{1}{x!} x!1​( x ! x! x! 表示 x x x 的阶乘,下同)。

由于数列是平均分配的,所以最后每个子序列要么有 ⌊ n 2 k ⌋ \left \lfloor \dfrac{n}{2^{k}} \right \rfloor ⌊2kn​⌋ 个数,要么有 ( ⌊ n 2 k ⌋ + 1 ) \left ( \left \lfloor \dfrac{n}{2^{k}} \right \rfloor +1 \right ) (⌊2kn​⌋+1) 个数,而且每种数列的个数我们是可以算出来的,最后有序的概率就是每个子数列有序的概率的总乘积。

由于一共有 n ! n! n! 中不同的排列,最后用上面算出的概率值乘以 n ! n! n! 就是最终的答案。

拿样例 1 1 1 举例:

  1. n = 3 , k = 1 n=3,k=1 n=3,k=1,把长度为 3 3 3 的数列分成 2 2 2 份,一份长 1 1 1,一份长 2 2 2,最后有序的概率为 1 1 ! × 1 2 ! = 1 2 \dfrac{1}{1!} \times \dfrac{1}{2!}=\dfrac{1}{2} 1!1​×2!1​=21​,因此答案为 3 ! × 1 2 = 3 3! \times \dfrac{1}{2}=3 3!×21​=3。
  2. n = 10 , k = 2 n=10,k=2 n=10,k=2,分成 2 , 2 , 3 , 3 2,2,3,3 2,2,3,3 四份,答案应为 10 ! × 1 2 ! × 2 ! × 3 ! × 3 ! = 25200 10! \times \dfrac{1}{2! \times 2!\times 3! \times 3!}=25200 10!×2!×2!×3!×3!1​=25200。
  3. n = 3 , k = 0 n=3,k=0 n=3,k=0,只能分成 3 3 3 一份,答案为 3 ! × 1 3 ! = 1 3! \times \dfrac{1}{3!}=1 3!×3!1​=1。

总的时间复杂度 O ( T × log ⁡ n ) O(T \times \log n) O(T×logn)。

[code] \color{blue}{\texttt{[code]}} [code]

const int N=1e6+100;
const int mod=1e9+7;
int fac[N],inv[N],n,k,ans;
inline int ksm(int a,int b){register int ret=1;while (b){if (b&1) ret=1ll*ret*a%mod;a=1ll*a*a%mod;b>>=1;}return ret;
}
inline void init_fac_inv(int n){fac[0]=1;for(int i=1;i<=n;i++)fac[i]=1ll*i*fac[i-1]%mod;inv[n]=ksm(fac[n],mod-2);for(int i=n;i;i--)inv[i-1]=1ll*i*inv[i]%mod;
}
int main(){init_fac_inv(1e6);for(int T=1,G=read();T<=G;T++){n=read();k=read();ans=1;if (k>20||(1<<k)>=n){printf("%d\n",fac[n]);continue;}else if (k==0){printf("1\n");continue;}ans=1ll*ksm(inv[n/(1<<k)],(1<<k))*ksm(ksm(n/(1<<k)+1,mod-2),(n%(1<<k)))%mod;printf("%lld\n",1ll*ans*fac[n]%mod);}return 0;
}

2021.07.13 洛谷 P7392相关推荐

  1. 哔哩哔哩“2021.07.13 我们是这样崩的”报告的学习-1

    哔哩哔哩"2021.07.13 我们是这样崩的"报告的学习-1 这份报告是我学计算机两年来第一次真实看到大厂的员工到底在干什么.出现了很多专有名词,以及当前最先进的互联网企业的应用 ...

  2. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...

  3. 2021.11.17洛谷小鱼游泳进阶版——c语言

    题目背景 原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题. 题目描述 有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x(1\le x \le 7)x(1≤x ...

  4. 2021.11.6洛谷凸边形对角线——c语言

    题目描述 对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点.请求出图形中对角线交点的个数. 例如,66 边形: 输入格式 输入只有一行一个整数 nn,代表边数. 输出格式 输出一行一个 ...

  5. 2021.11.9洛谷苹果与虫子——c语言

    题目描述 八尾勇喜欢吃苹果.她现在有(m≤100) 个苹果,吃完一个苹果需要花费 t(0≤t≤100) 分钟,吃完一个后立刻开始吃下一个.现在时间过去了s(s≤10000) 分钟,请问她还有几个完整的 ...

  6. 2021.07.13【B站】是这样崩的

    至暗时刻 2021年7月13日22:52,SRE收到大量服务和域名的接入层不可用报警,客服侧开始收到大量用户反馈B站无法使用,同时内部同学也反馈B站无法打开,甚至APP首页也无法打开.基于报警内容,S ...

  7. 2021.07.13 B站是这样崩的

    大家还记得去年这一天,B 站崩了的事情么? 就在昨天 B 站技术部发布了去年 B 站崩溃的事故报告,在这个迟来一年的报告中,简要介绍了故障产生的诱因.根因.处理过程和优化改进,大家可以看看 B 站程序 ...

  8. 2021.07.13 我们是这样崩的

    至暗时刻 2021年7月13日22:52,SRE收到大量服务和域名的接入层不可用报警,客服侧开始收到大量用户反馈B站无法使用,同时内部同学也反馈B站无法打开,甚至APP首页也无法打开.基于报警内容,S ...

  9. 2021.12.9洛谷小书童——凯撒密码——c语言

    题目背景 某蒟蒻迷上了"小书童",有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成.密码是由 ...

最新文章

  1. Google 的 Java 编码规范,参考学习!
  2. 第二阶段冲刺10天 第五天
  3. recycleview 嵌套高度问题_RecyclerView嵌套子RecyclerView无法正常显
  4. Spring Boot应用程序的“本地服务”
  5. linux中循环删除脚本,shell脚本:遍历删除
  6. es6,es7,es8语法总结
  7. 当面试官问你了不了解defineProperty的时候。。。
  8. 2021-11-17
  9. 第 13 章 装饰模式【Decorator Pattern】
  10. 计算机辅助设计和制造论文,计算机辅助设计与制造CAD-CAM
  11. 压力变送器自动检测系统 技术设计说明书
  12. dell主板恢复出厂设置_戴尔恢复出厂设置【搞定办法】
  13. 霍志刚中国科学院计算机,曙光4000系列高性能计算机研究集体
  14. Pandas Percentile计算方法
  15. 改造create-react-app 引入dva和antd
  16. 【kafka】解决kafka-tool连接上kafka,brokers和topics不显示问题
  17. 【26天高效学习Java编程】Day22:Java中的属性集-缓冲流-转换流-序列化流详解
  18. bpl开发模式_BPL的完整形式是什么?
  19. Spring Security OAuth2实现使用JWT
  20. 国内领先的30个知名b2b电子商务平台

热门文章

  1. 数据库基础--数据库基础管理(创建库/表 以及插入修改删除表数据)
  2. spring boot 定制个性化 favicon
  3. STM32F4 (hal库)ADC+TIM1+DAC的配置
  4. 2020年蓝桥杯省模拟赛
  5. 大胆猜测:今年816全民顾家日埋了3个伏笔?
  6. 每日技巧分享:电脑怎么拍照识别?
  7. 解决”VT-x/AMD-V 硬件加速在您的系统中不可用。您的 64-位虚拟机将无法检测到 64-位处理器,从而无法启动。“问题
  8. Matlab偏最小二乘回归命令plsregress详解
  9. 武汉流星汇聚:亚马逊产品listing优化之关键词优化四大要素
  10. Linux 线程创建