三个袋子

news/2025/2/12 7:47:42/

(文章修改于2020年3月22日23点45分)
第二次做这个原题时WA了两次,才发现是有些隐蔽的数据不能通过(如32532525 99999)为防止溢出,将所有的int型改为long long int型
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
平平在公园里游玩时捡到了很多小球,而且每个球都不一样。平平找遍了全身只发现了3个一模一样的袋子。他打算把这些小球都装进袋子里(袋子可以为空)。他想知道他总共有多少种放法。
将N个不同的球放到3个相同的袋子里,求放球的方案总数M。
结果可能很大,我们仅要求输出M mod K的结果。
现在,平平已经统计出了N<=10的所有情况。见下表:

N12345678910
M1251441122365109432819842

输入
两个整数N,K,N表示球的个数。
输出
输出仅包括一行,一个整数M mod K 。
样例输入 Copy

11 10000

样例输出 Copy

9525

提示
对于 40%数据,10<=N<=10,000
对于100%数据,10<=N<=1,000,000,000
对于 100%数据,K<=100,000
方法一:
题目给出了1~10的结果,那我们就充分利用这10个结果。我们让后一个数减前一个数,通过归纳猜想可以发现相邻两个数的差是3的整数次幂,而且随着n的增大,在不取模的前提下这种关系肯定成立,因此构造递推关系:n=1时,f(1)=1;n>=2时,f(n)-f(n-1)=3^(n-2),利用累加法求得通项为f(n)=(3^(n-1)+1)/2。经检验通项公式符合题意。
方法二:
直接推导:假设3个盒子都不相同,则每个球都有3种选择,n个球有3^n次种,实际上需要除去重复的部分,即除以3!,而当有两个袋子为空时,只算了三种情况,需要补足,因此答案为(3^n+3)/6,即(3^(n-1)+1)/2
得到通项公式后,接下来就求(3^(n-1)+1)/2对K取模。实际操作发现,如果直接运用模的运算法则计算的话,过程较麻烦,而且答案也不对,搞了好久才发现是1/2的问题。现令(3^(n-1)+1)/2=x*k+t,这里的t是取模后的结果。一般地,有(a/b)mod c=(a mod (bc))/b,这样的目的是消除分式对取模的影响。转化一下就得到3^(n-1)+1=2*x*k+2*tt=((3^(n-1)+1)%(2*k))/2=((3^(n-1)%(2*k)+1)%(2*k))/2,这里的1%(2*k)直接写成1,3^(n-1)%(2*k)部分就是典型的快速幂算法。

#include<stdio.h>
typedef long long int lli;//为防止溢出,将所有的int型改为long long int型
lli quick_pow(lli b,lli mod)//快速幂
{lli a=3;lli ans=1;mod=mod*2;while(b){if(b%2==1){ans=ans*a%mod;}a=a*a%mod;b=b/2;}return ans;
}
int main()
{lli n;lli k;scanf("%lld %lld",&n,&k);printf("%lld",(quick_pow(n-1,k)+1)%(2*k)/2);return 0;
}

http://www.ppmy.cn/news/496759.html

相关文章

【转】手机怎么放可以减少辐射?

文章来源> http://health.huanqiu.com/hygiene/hint/2009-05/466422.html 随着无线通讯技术的发展&#xff0c;使用手机的人越来越多&#xff0c;而手机带来的相关健康问题也引起了人们更多的关注。手机的辐射到底对人体有多大危害&#xff0c;如何把危害的程度降到最低&a…

不要把自己装在袋子里面

这几天一直在处理疾控和卫生监督所网络的事情&#xff0c;感受如下&#xff1a; 1、不要把自己装在袋子里面。 2、不要把喜怒写在脸上。 3、低调是一种实用技巧。 4、有时候留白很重要。 呵呵&#xff0c;就这样吧。

Docker 将jar包 打包成容器,并挂载jar包和指定yml配置

1.在 Dockerfile 中指定基础镜像&#xff0c;如 openjdk:8-jdk-alpine。 2.在 Dockerfile 中创建一个工作目录&#xff0c;如 /app。 3.将 jar 包复制到工作目录中&#xff0c;可以使用 COPY 指令。 4.将 yml 配置文件复制到工作目录中&#xff0c;也可以使用 COPY 指令。 5.暴…

手机放哪里辐射危害最低?

一般来说&#xff0c;手机待机时辐射较小&#xff0c;通话时辐射大一些&#xff0c;而在手机号码已经拨出而尚未接通时&#xff0c;辐射最大&#xff0c;辐射量是待机时的3倍左右。这些辐射有可能改变人体组织&#xff0c;对人体健康造成不利影响。 别放枕头边 据中国室内装…

手机放法分析,放哪里最好?辐射小?

在家里、在办公室或在户外&#xff0c;我们都习惯把手机放在什么地方呢&#xff1f;放在口袋里、挂在腰间、放在枕头下担心会对不同部位造成辐射&#xff0c;影响身体健康&#xff0c;拿在手里、放在办公桌上担心被抢或遗失&#xff0c;放在包包里容易错失电话&#xff0c;到底…

闲置手机不要换锅换盆,你会后悔的

“女士们&#xff0c;先生们&#xff0c;你们好&#xff0c;不管是旧的、破的手机都可以换不锈钢脸盆”&#xff0c;这是街头回收旧手机的一条广告语。现在科技的发展越来越快&#xff0c;手机的更新换代也很快&#xff0c;相信朋友们家里的旧手机不下2&#xff0c;3部&#xf…

千万别把手机放裤袋里!!

千万别把手机放裤袋里 <script language"javascript" type"text/javascript">document.title"千万别把手机放裤袋里 - "document.title</script> 手机什么时候辐射最强&#xff1f; 当人们使用手机时&#xff0c;手机会向发射基站传…

LeetCode - #83 删除排序链表中的重复元素

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…