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的更多相关文章
随机推荐
- 20155226 2016-2017-2 《Java程序设计》第2周学习总结
20155226 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 了解了基本类型以及初识类类型,熟悉了注释,变量及运算符的使用. 了解了几种运算方式但还不算熟 ...
- 20155331 丹增旦达 2006-2007-2 《Java程序设计》第二周学习总结
20155331 丹增旦达 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一 ,类型.变量与运算符 一.数据类型 1, 分类: 基本数据类型 byte:字节 ...
- 银行业务-Excel文件的拆分逻辑
一.问题: 随着银行业务数据量的急剧增加,原始的人力统计数据已经不能满足要求, 需要开发一款可以实现自动化数据统计的系统平台,进行数据的采集.加工.过滤.统计.预测 其中数据采集方式又以[Excel] ...
- spring_cloud多个微服务访问时偶发forward_error问题
1.问题: 最近在做SpringBoot项目的时候,有多个分开的微服务,偶发forward error 问题 2.猜想: 个人理解为服务跳转错误,可能本身没找到目标服务,或者目标服务损坏 3.解决: ...
- 北京Uber优步司机奖励政策(4月14日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Swift入门基础知识
var //代表变量,变量的值可以改变 let//代表常量类型不可改变 //声明常量heh类型Swift会自动根据你的值来自动判断该变量的类型也可以指定类型(个人感觉还是指定类型的比较好,可能会减少系 ...
- Linux环境配置备忘
1.Ubuntu服务器版本装scipy 预装版本可能fortran包版本过旧或者不全,安装scipy之前需要更新环境. sudo apt-get install gfortran libopenbla ...
- 基于MapReduce的(用户、物品、内容)的协同过滤推荐算法
1.基于用户的协同过滤推荐算法 利用相似度矩阵*评分矩阵得到推荐列表 已经推荐过的置零 2.基于物品的协同过滤推荐算法 3.基于内容的推荐 算法思想:给用户推荐和他们之前喜欢的物品在内容上相似的物品 ...
- 180725-InfluxDB-v1.6.0安装和简单使用小结
InfluxDB安装和简单使用小结 InfluxDB是一个时序性数据库,因为工作需求,安装后使用测试下是否支持大数据下的业务场景 说明: 安装最新版本 v1.6.0 集群版本要收费,单机版本免费 内部 ...
- php 通过curl上传图片
通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...