题目

https://www.rqnoj.cn/problem/85

题目描述
背景
平平在公园里游玩时捡到了很多小球,而且每个球都不一样。平平找遍了全身只发现了3个一模一样的袋子。他打算把这些小球都装进袋子里(袋子可以为空)。他想知道他总共有多少种放法。
题目描述
将N个不同的球放到3个相同的袋子里,求放球的方案总数M。
结果可能很大,我们仅要求输出M mod K的结果。
现在,平平已经统计出了N<=10的所有情况。见下表:
N 1 2 3 4 5 6 7 8 9 10
M 1 2 5 14 41 122 365 1094 3281 9842
数据规模
对于 40%数据,10<=N<=10,000
对于100%数据,10<=N<=1,000,000,000
对于 100%数据,K<=100,000
输入格式
两个整数N,K,N表示球的个数。
输出格式
输出仅包括一行,一个整数M mod K 。


解题思路

因为在考场上忘记矩阵乘法+快速幂加速递推怎么敲了,所以只打了部分分的代码。 但是经过莫名其妙的优化后就能AC

经过前10组数据的推导,可以发现:
f[N]=1+(3n−2+3n−3+...+30)f[N]=1+(3^{n-2}+3^{n-3}+...+3^0)f[N]=1+(3n−2+3n−3+...+30)
=3N−1+12=\frac{3^{N-1}+1}{2}=23N−1+1​;
但要对于KKK取模,如果求222的逆元,当K为偶数时无解

 -----------------------(<<--仅仅会推上面的-->>)

这时候就要用到(a/b)%c=(a%(b∗c))/b(a/b)\% c=(a\% (b*c))/b(a/b)%c=(a%(b∗c))/b;
具体证明:
设a=i∗b∗c+j∗b+k;a=i*b*c+j*b+k;a=i∗b∗c+j∗b+k;
则原式转换为:
((i∗b∗c+j∗b+k)/b)%c=(i∗b+j)%c=j((i*b*c+j*b+k)/b)\% c=(i*b+j)\% c=j((i∗b∗c+j∗b+k)/b)%c=(i∗b+j)%c=j;
和((i∗b∗c+j∗b+k)%(b∗c))/b=(j∗b+k)/b=j((i*b*c+j*b+k)\% (b*c))/b=(j*b+k)/b=j((i∗b∗c+j∗b+k)%(b∗c))/b=(j∗b+k)/b=j;
左右相等,证毕。


证明来源:https://blog.csdn.net/qq_35479641/article/details/52507337

至于关于矩阵乘法,可参考以下(https://blog.csdn.net/xuxiayang/article/details/83540329):


代码快速幂

#include<cstdio>
using namespace std;
long long k,n,x=1,y=3;
int main()
{scanf("%lld%lld",&n,&k); for (n-=1,k<<=1;n;y=(y*y)%k,n>>=1) if (n&1) x=(x*y)%k; printf("%lld",(x+1)>>1);
}

[RQNOJ PID85]三个袋子 {快速幂 or 矩阵乘法}相关推荐

  1. [题解]RQNOJ PID85 三个袋子

    链接:http://www.rqnoj.cn/problem/85 思路:一个排列问题,递推式很简单,f(n+1)=3*f(n)-1 ,由此可以推出通项公式,f(n)=0.5*3^(n-1)+0.5 ...

  2. 快速幂或者矩阵快速幂

    快速幂或者矩阵快速幂在算大指数次方时是很高效的,他的基本原理是二进制,下面的A可以是一个数也可以是一个矩阵(本文特指方阵),若是数就是快速幂算法,若是矩阵就是矩阵快速幂算法,用c++只需把矩阵设成一个 ...

  3. 二分幂,快速幂,矩阵快速幂,快速乘

    前言 二分幂,快速幂,矩阵快速幂在算大指数次方时是很高效的. 求 a^n 的值是多少?n是1到10^18次方的一个整数. 求一个数的n次方,朴素的算法就是直接for循环,一遍一遍的乘,a*a*a*a* ...

  4. 奶牛家族(斐波那契数列的快速幂乘矩阵算法)

    TX面试题: 已知有一头牛4年后开始生小牛,一次只能生一只,问20年后一共有多少头牛? 这种问题就是简单的递归: 这头奶牛在第四年后能不断生子直到第二十年,其子出生4年后又能不断生子-- 代码如下: ...

  5. 矩阵快速幂(矩阵加速)

    //南昌理工ACM集训队 放心食用 矩阵加速 快速幂(前置技能) 矩阵快速幂 可乐 附个模板 最后小结 本人小白如有不对欢迎指正ლ(╹◡╹ლ) 矩阵加速 快速幂(前置技能) 对于普通的求a的b次方,一 ...

  6. 快速幂与矩阵快速幂学习笔记

    首先附上我学习快速幂的链接 https://blog.csdn.net/qq_19782019/article/details/85621386 并从中摘抄了一些有用的东西记录下来作为总结 1.&qu ...

  7. python【数据结构与算法】快速幂and矩阵快速幂取模(看不懂你来打我)

    文章目录 1 解释快速幂 2 代码(这里就不考虑指数为小于0的情况了) 3 下面是矩阵快速幂,区别只是底数换成了矩阵 1 解释快速幂 传统的幂运算,是对底数进行连乘,时间复杂度为o(n),例如:2^1 ...

  8. 快速幂、矩阵快速幂、快速乘法

    快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...

  9. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  10. Xn数列(矩阵乘法+快速幂+慢速乘法)

    Xn数列 题目描述: 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描述: 一行 ...

最新文章

  1. 终于完成了“微软”化
  2. 用子函数的方法求一个3*4的数组的转置数组
  3. 微信小程序中input和picker之间切换导致input无法失去焦点
  4. iOS与Opencv的探秘之Opencv认识,适配Xcode
  5. 创维37K05HR黑屏有声音故障维修
  6. [C++STL]常用排序算法
  7. magento如何在首页显示产品
  8. Linux使用docker安装RabbitMQ一站式教程【图文教程】
  9. PHP如何关闭notice级别的错误提示
  10. 【笔记】《离散数学》第十章 递推方程与生成函数
  11. 颜色列表(中英文名称,RGB HSV CMYK值)
  12. 05、ADS使用记录之集总参数匹配
  13. iis7 运行多个https,433端口监听多个htps 站点
  14. 边缘计算与智慧城市应用
  15. Linux-虚拟网络设备-LinuxBridge
  16. python format( )强力格式化
  17. 转 鲁迅《随感录》之一二
  18. Cassandra,NoSQL中的兰博基尼
  19. 记一次任意用户密码重置漏洞(session覆盖)
  20. luoguP3600 随机数生成器概率与期望Dp

热门文章

  1. 远程桌面无法复制粘贴问题
  2. 计算机专业网页设计周志,毕业设计周志范文100篇
  3. 【比特率和波特率】bit rate VS baud rate
  4. h3c交换机配置nat_H3C-NAT 命令配置
  5. 对可道云KodExplorer去掉版权简单破解方法
  6. 卡尔曼滤波/扩展卡尔曼/粒子滤波算法,dashgo d1与kinect 粒子滤波/EKF扩展卡尔曼滤波融合IMU(heneywell_HG112)+GPS(和芯星通UB482)+stm32室外定位
  7. 电脑连接安卓手机摄像头的方法(含DroidCam安装包及简明使用教程)
  8. droidcam调用手机摄像头的方法(提供PC+Android软件,不需要积分)
  9. 觅风易语言智能辅助开发视频教程(高清带源码)
  10. 计量经济学(十)---模型选择:标准与检验