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

题意是这样的,给你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. 20155306 实验四 Android程序设计

    20155306 实验四 Android程序设计 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握An ...

  2. Ubuntu + apache + Mysql +php

    发生了乱码问题: 打开apache配置文件: sudo gedit /etc/apache2/apache2.conf,在最后面加上:AddDefaultCharset UTF-8,如果还乱码,再将U ...

  3. dsp6657的helloworld例程测试-第二篇-CFG文件

    1. 上一篇疑问,int StackTest()这个函数是怎么运行的,后来在.cfg文件找到了答案,.cfg包含丰富的信息,对于用惯C语言的,确实不太习惯 var Memory = xdc.useMo ...

  4. 【Windows定时关机】windows实现定时关机与取消

    背景:本人昨晚本来打算将电脑设置为晚上12点 30定时关机,结果写成了:12:30,所以就在刚才,我正玩游戏的时候, 电脑弹出提示:“windows将在一分钟内关闭”,我刚开始一脸懵逼,后来打开昨天敲 ...

  5. VS2008 "无法找到资源编译器dll 请确保路径正确"

    系统环境:windows 8.1 企业版 x64 (装有 .NET 2.0 / 3.5 / 4.0 /  4.5) 安装前确认系统已安装 .NET 2.0 / 3.5 .在安装时,最好是默认安装,并且 ...

  6. 函数parseQuery用于解析url查询参数

    在百度上找的,以后忘了再看. 语法如下: var obj = parseQuery(query) query是被解析的查询参数,函数返回解析后的对象. 使用范例如下: var jerry = pars ...

  7. 接口自动化·分享·第二篇·你必须了解的HttpRequest和HttpResponse

    完成一个接口调用其实就是完成了一次http请求,所以你必须要清楚一个http请求的组成. 一次完整的请求包含:请求+响应. 一.HttpRequest请求对象 要调用一个接口,首先要准备的是一个请求对 ...

  8. HDU-2844:Coins(多重背包+二进制优化)

    链接:HDU-2844:Coins 题意:给你n个种类的钱和对应的数量,同统计一下从1到m能够凑成的钱有多少个. 题解:C[i] = 1 + 2 + 4 + ··· + 2^k + a (0 < ...

  9. hive的内置函数和自定义函数

    一.内置函数 1.一般常用函数 .取整函数 round() 当传入第二个参数则为精度 bround() 银行家舍入法:为5时,前一位为偶则舍,奇则进. .向下取整 floor() .向上取整 ceil ...

  10. 微软职位内部推荐-Senior Software Engineer II-Search

    微软近期Open的职位: Do you want to work on a fast-cycle, high visibility, hardcore search team with ambitio ...