【SC主题公园杯邀请赛】【cqbzoj1005】三个袋子 如何手残
来源:互联网 发布:pythonweb开发知乎 编辑:程序博客网 时间:2024/05/01 07:36
三个袋子
时间限制: 1 Sec 内存限制: 64 MB
题目描述
平平在公园里游玩时捡到了很多小球,而且每个球都不一样。平平找遍了全身只发现了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
输入
两个整数N,K,N表示球的个数。
输出
输出仅包括一行,一个整数M mod K 。
样例输入
11 10000
样例输出
9525
提示
数据规模 对于 40%数据,10<=N<=10,000 对于100%数据,10<=N<=1,000,000,000 对于 100%数据,K<=100,000
其实这道题有更简单的方法(数学差系列)
点这里看szp的题解
手残报告
找规律得f[i]=3*f[i-1]-1
明显矩阵加速
下面贴代码
#include<cstdio>#include<cstring>typedef long long LL;LL mat_mod;const int MAT_SIZE=4;struct Matrix{ int x,y; LL mat[MAT_SIZE][MAT_SIZE]; Matrix(){x=y=0;memset(mat,0,sizeof mat);} void singlelize(){ if(x!=y)puts("Error"); memset(mat,0,sizeof mat); for(int i=1;i<=x;i++) mat[i][i]=1; }};Matrix operator*(const Matrix&a,const Matrix&b){ if(a.y!=b.x)return *((Matrix*)0); Matrix ret; for(int i=1;i<=a.x;i++) for(int j=1;j<=b.y;j++) for(int k=1;k<=a.y;k++){ ret.mat[i][j]+=(a.mat[i][k]*b.mat[k][j])%mat_mod; ret.mat[i][j]%=mat_mod; } ret.x=a.x; ret.y=b.y; return ret;}Matrix tmp;Matrix adv_pow(Matrix a,LL b,LL c){ mat_mod=c; tmp=a; tmp.singlelize(); while(b){ //printf("mtp"); if(b&1)tmp=tmp*a; a=a*a; b>>=1; } return tmp;}int main(){ LL n,k; scanf("%lld%lld",&n,&k); Matrix p; p.mat[1][1]=1; p.mat[1][2]=1; p.mat[2][2]=3; p.x=p.y=2; Matrix vec; vec.mat[1][1]=-1; vec.mat[1][2]=1; vec.x=1; vec.y=2; Matrix mul=adv_pow(p,n-1,k); vec=vec*mul; LL ans=vec.mat[1][2]; if(ans<0)ans+=mat_mod; printf("%lld\n",ans);}
1 0
- 【SC主题公园杯邀请赛】【cqbzoj1005】三个袋子 如何手残
- 【其他】【RQNOJ】三个袋子
- 【数论】三个袋子
- RQNOJ85 三个袋子 题解、、
- 【DP+数学小技巧】三个袋子
- 三个火枪手读后感
- 三个火枪手 观后感
- SC
- sc
- 关乎DevOps成败的三个火枪手
- 法拉利主题公园之旅
- 如何防范"鼠标手"
- mt2503如何使用自己设置的SC而非sim卡上的SC发送短信
- google杯邀请赛 Avaricious Maryanna
- 三个入侵的必备小工具-lcx.exe、nc.exe、sc.exe
- 三个入侵的必备小工具-lcx.exe、nc.exe、sc.exe
- 全球十大主题公园(组图)
- 如何删除windows服务(sc delete MsMpSvc)
- WebAPI
- sql语句
- 转载]STL学习之String
- 环境安装
- nginx动静分离
- 【SC主题公园杯邀请赛】【cqbzoj1005】三个袋子 如何手残
- php openssl
- JAVA基础6.66——jar包
- 游标
- Spring Bean的生命周期(非常详细)
- 不用加减乘除做加法
- Redis
- LeetCodeOJ——4. Median of Two Sorted Arrays
- 创建博客-使用HTTPie测试Web服务