UVA11653_Buses
这个题目很有意思,一不小心就会让人坑在里面。
题意是这样的,给你n,k,l。分别表示总共的长度,长度为5和10的车的不同颜色数量现在问你要把n的填满有多少种方案。
很多人一开始都会脑子一根筋地想用排列组合去搞这个题目。然而实际上不是这样的。因为排列组合计算量巨大,而且这个题目的数据范围是10^15,绝对无法承受。
其实我们可以先把n/5,这样相当于是放长度为1和长度为2的方案了。
我们加入一个状态量f[i],其意义为长度为i的排列方案有多少种?
那么我们可以迅速地得出这个状态转移的递推式:f[i]=k*f[i-1]+l*f[i-2]。(分别表示放长度为1和2的情况嘛)
这样你是否有些眼熟了。。。。 对没有错,就是它——矩阵快速幂。
这样我们要求解的范围十分之小,瞬间变为了log级别,所以答案最终就可以轻松飘过啦。
#include <iostream>
#include <cstdio>
#include <cstring>
#define M 1000000
#define ll long long
using namespace std; struct mat{
ll a[][];
void init(ll k,ll l)
{
a[][]=k,a[][]=l,a[][]=,a[][]=;
}
void E()
{
a[][]=,a[][]=,a[][]=,a[][]=;
}
}tep,ans; mat mul(mat a1,mat a2)
{
mat f;
memset(f.a,,sizeof f.a);
for (ll i=; i<; i++)
for (ll j=; j<; j++)
for (ll k=; k<; k++)
f.a[i][j]=(f.a[i][j]+a1.a[i][k]*a2.a[k][j])%M;
return f;
} mat power(mat cur,ll y)
{
mat now;
now.E();
while (y)
{
if (y&) now=mul(now,cur);
y>>=;
cur=mul(cur,cur);
}
return now;
} int main()
{
ll n,k,l,f1,f2;
while (scanf("%lld%lld%lld",&n,&k,&l)!=EOF)
{
n/=;
k%=M,l%=M;
f1=k,f2=(k*k+l)%M;
if (n==)
{
printf("%06lld\n",f1);
continue;
}
if (n==)
{
printf("%06lld\n",f2);
continue;
}
tep.init(k,l);
ans=power(tep,n-);
printf("%06lld\n",(ans.a[][]*f2+ans.a[][]*f1)%M);
}
return ;
}
UVA11653_Buses的更多相关文章
随机推荐
- 20155338 2016-2017-2 《Java程序设计》第3周学习总结
20155338 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 本周学习量比较多,但是知识点并不是特别难,学习了书本的第四五章,其中个人重点学习了数组对象. ...
- CentOS安装输入法及kDE桌面
参考教程:https://jingyan.baidu.com/article/154b46317fdfce28ca8f419e.html
- Python不生成HTMLTestRunner报告-转载学习
1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...
- leetcode-优美的排列
假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列 ...
- 高可用Kubernetes集群-7. 部署kube-controller-manager
九.部署kube-controller-manager kube-controller-manager是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息. 如果多个mas ...
- RNN: Feed Forward, Back Propagation Through Time and Truncated Backpropagation Through Time
原创作品,转载请注明出处哦~ 了解RNN的前向.后向传播算法的推导原理是非常重要的,这样, 1. 才会选择正确的激活函数: 2. 才会选择合适的前向传播的timesteps数和后向传播的timeste ...
- 译 - 高可用的mesos计算框架设计
原文地址 http://mesos.apache.org/documentation/latest/high-availability-framework-guide/ 阅读建议:有写过或者看过Mes ...
- 如何成为优秀评级卖家(Top-rated seller)?与超级卖家的区别是
以eBay美国站点为例,要成为优秀评级卖家(Top-rated seller),需满足如下条件: ● 先成为 eBay超级卖家 ● Low DSR (US buyers) <= 0.50% 或 ...
- Scrum立会报告+燃尽图(Beta阶段第三次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2385 项目地址:https://coding.net/u/wuyy694 ...
- 软件工程-东北师大站-第六次作业PSP
1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图