P3487【2015多校联训5】病毒分裂
来源:互联网 发布:乐至县广电网络客服 编辑:程序博客网 时间:2024/06/08 14:32
问题描述
A 学校的实验室新研制出了一种十分厉害的病毒。由于这种病毒太难以人工制造了,所以专家们在一开始只做出了一个这样的病毒。
这个病毒被植入了特殊的微型芯片,使其可以具有一些可编程的特殊性能。最重要的一个性能就是,专家们可以自行设定病毒的分裂能力K,假如现在有x
个病毒,下一个分裂周期将会有Kx 个一模一样的病毒。你作为该实验室的数据分析员,需要统计出在分裂到第N
个周期前,一共有多少个病毒单体进行了分裂。一开始时总是只有一个病毒,这个局面算作第一个周期。由于答案可能很大,专家们只需要你告诉他们对给定的P
取模后的答案。
输入格式
一行三个整数,依次是K, N, P。
输出格式
一行一个整数,你的答案(对P 取模) 。
题解
考虑到p可能不为质数,所以考虑矩阵乘法。水题,复习一波矩阵乘法,注意数组的传递默认为地址传递。
代码
#include<stdio.h>#include<algorithm>#include<cmath>#include<cstring>#include<cstdio>#include<iostream>#include<queue>using namespace std;#define int long longtypedef int arr[3][3];arr f,ans,t;int k,n,p;void cj(arr a,arr b ){ int i,j,k; memset(t,0,sizeof(t)); for(i=1;i<=2;i++) { for(j=1;j<=2;j++) { for(k=1;k<=2;k++) { t[i][j]=t[i][j]+(a[i][k]*b[k][j])%p; t[i][j]%=p; } } } memcpy(a,t,sizeof(t));}void ksm(int x){ while(x) { if(x&1) cj(ans,f); x>>=1; cj(f,f); } cout<<(ans[1][1]+ans[2][1]*k)%p;}main(){ int i,j; scanf("%lld%lld%lld",&k,&n,&p); f[1][1]=f[2][1]=1;f[2][2]=k; ans[1][1]=1;ans[2][2]=1; ksm(n-2);}
阅读全文
0 0
- P3487【2015多校联训5】病毒分裂
- 病毒分裂
- 【数论】[CQBZOJ2935]病毒分裂
- 病毒分裂(分治)
- 【二分快速幂】病毒分裂
- 病毒分裂(分治+快速幂)
- Cpp环境【Vijos3160】【NOIP Practice】病毒分裂
- 分治算法练习题 病毒分裂(重庆一中高2018级信息学竞赛测验6) 解题报告
- 分裂容器
- Android分裂
- 分裂BST
- 索引分裂
- 类别 分裂
- 2064: 分裂
- 【BZOJ2064】分裂
- bzoj2064: 分裂
- bzoj2064 分裂
- BZOJ2064 分裂
- HDU 1074 Doing Homework ( 状态压缩 )
- 关于树状数组的两种最基本的用法
- Android YuvImage直接旋转
- C++ STL中Map的按Key排序和按Value排序
- vs2015 全局头文件 库文件引用设置方法
- P3487【2015多校联训5】病毒分裂
- 点击提示后几秒跳转到新的页面
- 文章标题
- 机器人基地-救援组-自主导航-navigation初探
- Linux下实时查看GPU状态
- JAVA CAS原理深度分析
- Python 爬虫(持续更新)
- 图像在直方图与均衡化
- codevs 1074 食物链(并查集)