吉首大学2019年程序设计竞赛(重现赛)- A SARS病毒 (矩阵,欧拉降幂)
2024-08-30 17:42:56
题目链接:https://ac.nowcoder.com/acm/contest/992/A
题意:求出长度为n的字符串个数,字符串由A、C、G、T组成,其中A和C必须成对出现。
思路:我们规定: f[n][0]--长度为n的合法字符串个数
f[n][1]--长度为n的A为奇数个的字符串个数
f[n][2]--长度为n的C为奇数个的字符串个数
f[n][3]--长度为n的A、C均为奇数个的字符串个数
那么有如下转移方程:
根据转移方程构建矩阵:
就可以通过矩阵快速幂求得了,n太大了,继续思考:
然后齐次线性递推得到:f[n][0]=4n-1+2n-1,之后欧拉降幂即可。
AC代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; typedef long long LL;
const int MOD=1e9+;
const int MOD1=1e9+; char s[]; LL qpow(LL a,LL b){
LL ret=;
while(b){
if(b&) ret=ret*a%MOD;
a=a*a%MOD;
b>>=;
}
return ret;
} int main(){
while(~scanf("%s",s)){
LL tmp=;
for(int i=;i<strlen(s);++i)
tmp=(tmp*+s[i]-'')%MOD1;
if(tmp>) --tmp;
else tmp=MOD1-;
tmp=qpow(,tmp);
printf("%lld\n",tmp*(tmp+)%MOD);
}
return ;
}
最新文章
- 高清VGA编码器|上海视涛科技
- linux 启动weblogic的某服务报错
- 烂泥:KVM虚拟机克隆
- work_queue 函数调用栈
- C++学习27 用全局函数重载运算符
- hdu 1305 Immediate Decodability
- [App]Taste VS2015 &;&; Android Studio
- 一个超级简单php的留言板
- WCF学习——构建一个简单的WCF应用(一)
- Spring Boot 2.x (十二):Swagger2的正确玩儿法
- spring security运行流程图(转)
- scala-02-数组的操作
- httpd 不带反斜杠 出现 301重定向
- 【Linux】awk详细介绍
- django用包来组织模型
- 【maven】Maven根据Profile读取不同配置环境配置文件
- BASIC-9_蓝桥杯_特殊回文数
- xiaocong/uiautomator
- 结对项目作业报告——四则运算web项目
- android驱动学习---led实验