Fy 觉得自己玩 cf,lol 这种高端游戏已经够厉害了,于

是他决定去玩 dota2.结果 fy 的鼠标右键坏了,所以他就等

到 2250 买了把闪烁匕首,用跳刀前进,准备去送泉水。但

是 fy 一次最多前进 k 的距离,泉水离 fy 现在的距离是 n。

Fy 想知道他到泉水的方案数。

输入格式:

第一行 2 个整数:k,n

输出格式:

一行 1 个整数:代表答案对 7777777 取膜的结果

样例输入:

2 4

样例输出

5

样例解释

一共有 5 种方案

→1→2→3→4

→2→3→4

→2→4

→1→3→4

→1→2→4

数据范围

对于 30%的数据:n<=1000,k<=10

对于 100%的数据:1<=n<=2^31-1,1<=k<=10

【题解】

递推:Ans[i]表示到i位置的方案数,Ans[i]+=Ans[j] ( j < i &&j>=i-k&&j>=1)

再用矩阵快速幂优化下一维的递推。有点类似于斐波那契数列、上台阶等经典。(然而考试时我不记得矩乘怎么弄了。。。)

矩阵乘法

矩阵就是一个二维数组,只有m*p的矩阵A可以和p*n的矩阵B相乘,交换律不可用。

相乘结果为一个m*n的矩阵C,第i列第j行的元素等于A中第i列(p个元素)和B中第j列(p个元素)对应相乘的积之和。

用矩阵乘法,一般这样:

用S表示状态矩阵,T表示转移矩阵,S*T=S’,就是下一状态矩阵。

我们需要根据S和S’,自行构造T转移矩阵。

以此题cell为例:

我们假设第b天的细胞数为a,那个下一个状态就是:第b+1天的细胞数为ax+b+1

我们把a,b填入S,ax+b,b+1填入S’,有

S(a,b)*T( )=S’(ax+b+1,b+1)

但这样的话1这个常数项构造不出来,所以我们加一项:

S(a,b,1)*T( )=S’(ax+b+1,b+1,1)

用我们的聪明才智构造T:

x,0,0

S(a,b,1)*T 1,1,0 =S’(ax+b+1,b+1,1)

1,1,1

我们要计算是n天后的细胞数,S初始化为(0,0,1),意思是第0天有0个细胞

答案就在S*T^n中,那么因为矩阵乘法满足结合律,所以我们可以对T^n进行快速幂。

或者也可以写成

x,0,0

S(a,b,1)*T 1,1,0 =S’(ax+b,b+1,1) 然后初始化(0,1,1),意思是第1天操作前有0个细胞

0,1,1

这样表示的是第b天进行操作(放入细胞、细胞分裂)之前有细胞个数a。

上代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=7777777;
int n,k;
struct matrix
{
int a[15][15];
matrix()
{
memset(a,0,sizeof(a));
}
int *operator [](int x)
{
return a[x];
}
matrix operator *(matrix &b)
{
matrix ans;
for (int i=0;i<k;i++)
for (int j=0;j<k;j++)
for (int l=0;l<k;l++)
ans[i][l]=(ans[i][l]+1ll*a[i][j]*b[j][l])%mod;
return ans;
}
}S,T; void init()
{
for (int i=0;i<k-1;i++) T[i+1][i]=1;
for (int i=0;i<k;i++) T[i][k-1]=1;
} int main()
{
freopen("fyfy.in","r",stdin);
freopen("fyfy.out","w",stdout);
scanf("%d %d",&k,&n);
S[0][0]=1;
for (int i=1;i<k;i++)
for (int j=0;j<i;j++)
S[0][i]+=S[0][j];
if (n<k)
{
printf("%d",S[0][n]);
return 0;
}
n-=k-1;
init();
while (n)
{
if (n&1) S=S*T;
T=T*T;
n>>=1;
}
printf("%d\n",S[0][k-1]);
return 0;
}

Fy's dota2的更多相关文章

  1. Fy's dota2 题解

    题目描述 Fy 觉得自己玩 cf,lol 这种高端游戏已经够厉害了,于 是他决定去玩 dota2.结果 fy 的鼠标右键坏了,所以他就等 到 2250 买了把闪烁匕首,用跳刀前进,准备去送泉水.但 是 ...

  2. Dota2 demo手游项目历程

    最近其实是打算认真研究c++ primer和设计模式的原著,然后写一些读书笔记的,不过设计模式原著里生词太多,大多都看的不是很明白,因此暂时放弃阅读设计模式,打算用这些时间做一个类似我叫mt2的手游d ...

  3. Win8&Win2012R2如何支持DOTA2输入法

    微软自带的拼音和五笔就不用看了,没研究过,下面的方法应该不支持. 其实方法很简单运行下ctfmon.exe就可以了,这个原来旧输入模式的基础,测试可以支持QQ五笔. PS:使用拼音输入法的用户可以直接 ...

  4. Linux下玩转Dota2

    Dota2是一款颇为风靡的即时战略类游戏,去年官方就支持Mac和Linux了,对于习惯Mac和linux平台的孩子们来说,简直感动的泪流满面. 当然,也简直是linux程序猿的福音啊啊! 与Win8. ...

  5. [LeetCode] Dota2 Senate 刀塔二参议院

    In the world of Dota2, there are two parties: the Radiant and the Dire. The Dota2 senate consists of ...

  6. [Swift]LeetCode649. Dota2 参议院 | Dota2 Senate

    In the world of Dota2, there are two parties: the Radiantand the Dire. The Dota2 senate consists of ...

  7. 使用scrapy爬取dota2贴吧数据并进行分析

    一直好奇贴吧里的小伙伴们在过去的时间里说的最多的词是什么,那我们就来抓取分析一下贴吧发文的标题内容,并提取分析一下,看看吧友们在说些什么. 首先我们使用scrapy对所有贴吧文章的标题进行抓取 scr ...

  8. 【转】 DOTA2中的伪随机及其lua实现

    因为单纯的随机确实会影响到竞技性,所以dota2引入的是伪随机机制,在大量的技能中,比如说混沌的混乱之箭.剑圣的剑舞.冰女的冰霜领域之类的技能,都利用了伪随机机制. 而纯随机,或者标准正态分布并不会因 ...

  9. 基于SpringBoot+SSM实现的Dota2资料库智能管理平台

    Dota2资料库智能管理平台的设计与实现 摘    要 当今社会,游戏产业蓬勃发展,如PC端的绝地求生.坦克世界.英雄联盟,再到移动端的王者荣耀.荒野行动的火爆.都离不开科学的游戏管理系统,游戏管理系 ...

随机推荐

  1. Microsoft SQL Server 安全与权限

    Microsoft SQL Server 安全与权限 登陆角色 计算机操作系统用户 --创建Windows身份验证用户 USE [master] GO CREATE LOGIN [计算机名称\计算机用 ...

  2. react 中样式私有

    解决的问题,两个组件之间  有相同的class名,造成其中一个无法按预期的显示. import React, { Component } from 'react' import styles from ...

  3. block: cfq 学习01

    CFQ,即Completely Fair Queueing绝对公平调度器,力图为竞争块设备使用权的所有进程分配一个等同的时间片,在调度器分配给进程的时间片内,进程可以将其读写请求发送给底层块设备,当进 ...

  4. UVA-1599 Ideal Path(双向BFS)

    题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...

  5. Ztree加载完成默认选中根节点右侧生成表格

    需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格: 效果:如下图所示: 思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并 ...

  6. 【汇总】java中数组的声明、初始化及遍历

    java中数组用来存储固定大小的同类型元素 一维数组: 1.数组的声明: //声明一维数组,推荐用第一种 int[] a; int b[]; 2.数据的初始化:有三种初始化方式 (1).静态初始化 / ...

  7. svn汉化包安装无效的解决办法

    下载svn汉化包要和对应的svn客户端版本对应,否则安装无效, 在安装前要想将svn安装目录下的languages目录下的文件全部删除 还有一点要注意的是 汉化包安装要放在svn安装目录下进行安装,它 ...

  8. Batchelor Prize

    awards in fluid mechanics The Prize of $25,000 is awarded every four years to a single scientist for ...

  9. airfoil polar data during post stall stages (high AOA)

    airfoil polar data during post stall stages (high AOA) Table of Contents 1. airfoil polar during pos ...

  10. Packages on Ubuntu OS

    openSSH https://help.ubuntu.com/lts/serverguide/openssh-server.html