这个题目很有意思,一不小心就会让人坑在里面。

题意是这样的,给你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的更多相关文章

随机推荐

  1. Nginx入门篇(二)之Nginx部署与配置文件解析

    一.Nginx编译安装 ()查看系统环境 [root@localhost tools]# cat /etc/redhat-release CentOS Linux release (Core) [ro ...

  2. sqlserver2008 数据库

    删除数据库提示: 无法对 数据库'DBName' 执行 删除,因为它正用于复制 之前建立过此数据库的发布订阅,但是后来删掉了发布订阅,也将对应的作业停止了,仍然报这个错,遂用此命令强制删除发布: sp ...

  3. STM32运行FreeRTOS出现prvTaskExitError错误死机

    文件port.c prvTaskExitError();任务退出错误,一个可能在任务里面写了return,另一个可能任务切换退出问题,入栈和出栈的时候出了问题. static void prvTask ...

  4. ln in Linux

    默认情况(硬连接) ln 目标 连接名称 ll -i 显示文件的inode信息,即文件节点信息 ➜  test1 ll -i 1.txt 27987655 -rw-r--r--  1 myuser   ...

  5. Java+Selenium 3.x 实现Web自动化 - Maven打包TestNG,利用jenkins执行测试

    1. Jenkins本地执行测试 or 服务器端执行测试 测试代码计划通过jenkins执行时,通过网上查询各种教程,大多数为本地执行测试,由此可见,本地执行是大多数人的选择. 经过探讨,最终决定采用 ...

  6. 二叉树的深度<java版>

    二叉树的结构 二叉树是比较常见的一种的一种数据结构. 首先看看二叉树的数据结构: //由左节点和右节点以及一个节点值构成 public class TreeNode{ TreeNode leftNod ...

  7. tikv 安装

    export HostIP="127.0.0.1" docker run -d -p 2379:2379 -p 2380:2380 --name pd pingcap/pd \ - ...

  8. sql server block如何查询并kill

    本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量. 所谓的「阻塞」,是指当 ...

  9. Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut

    cat 查看文件内容 [root@mysql tmp]# cat 2.txt 1234 -n 查看行号 [root@mysql tmp]# cat -n 2.txt      1 1234       ...

  10. AppCan 之初体验

    平台概述 什么是AppCan 移步这里,楼主的一句话:可以匹敌 Phonegap .Titanium .Sencha Touch .MUI .ImagApp.Nitrous .apicloud .起步 ...