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的更多相关文章
随机推荐
- 20155236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155236 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 因为我用的是windo ...
- Python:静态方法、类方法、实例方法
1. 静态方法@staticmethod (1)无需自身对象的self参数和自身类的cls参数,可直接通过 类名.方法名 进行调用 (2)Python中并不是真正意义上的静态方法,因为类定义本身就是个 ...
- Zabbix远程执行命令
原文发表于cu:2016-06-14 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令. 本文主要配置验证zabbix执行远程命令. 一.环境 S ...
- Laxcus大数据操作系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- 袋鼠云旗下新公司云掣科技启航,深耕云MSP业务助推企业数字化转型
1983年3月15日,国际消费者联盟组织将3月15日确立为国际消费者权益日. 2019年3月15日,袋鼠云举办三周年年会. 一生二,二生三,三生万物.植树节后,万物生长. 年会现场,袋鼠云宣布成立新公 ...
- 剑指 Offer——和为 S 的两个数字
1. 题目 2. 解答 由于数组是已经排好序的,我们可以定义两个指针,第一个指针指向第一个元素,第二个指针指向最后一个元素,然后求出这两个元素的和,与目标和进行比较.若小于目标和,第一个指针向前移动: ...
- Hyperledger中的共识机制
Hyperledger Consensus 共识过程 Hyperlydger中建立共识的过程由以下两个独立的过程构成: Ordering of transactions (交易排序) Validati ...
- zabbix监控历史数据清理
2018/12/24 14:00:57 zabbix监控运行一段时间以后,会留下大量的历史监控数据,zabbix数据库一直在增大:可能会造成系统性能下降,查看历史数据室查询速度缓慢. zabbix里 ...
- Windows下使用WinRAR命令自动备份文件
最近有一个需求:为了防止数据丢失,每天对固定文件夹下的文件进行打包压缩备份. 解决办法:使用Windows的任务计划程序,每天执行一下压缩命令: Windows任务计划程序在这里就不再介绍了,网上有很 ...
- Python Pygame (4) 图像的变换
Pygame中的transform模块可以使得你能够对图像(也就是Surface对象)做各种动作,列如左右上下翻转,按角度转动,放大缩小......,并返回Surface对象.这里列举了transfo ...