题目描述

Fy 觉得自己玩 cf,lol 这种高端游戏已经够厉害了,于 是他决定去玩 dota2.结果 fy 的鼠标右键坏了,所以他就等 到 2250 买了把闪烁匕首,用跳刀前进,准备去送泉水。但 是 fy 一次最多前进 k 的距离,泉水离 fy 现在的距离是 n。 Fy 想知道他到泉水的方案数。

输入输出格式

输入格式:

第一行 2 个整数:k,n

输出格式:

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

数据范围约定

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

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

题解

 更具题目我们先来推一下,我们发现当允许的跳跃距离为 k 时,调到 i 新增加的方案数只会从(i-k)~ (i - 1)提供贡献,而其他的方案都可以归类到其中,所以我们就可以得到下面这个递推公式

    

  初始量是f[1] = 1, f[0] = 1;

  而由于数据范围是到2^31所以我们要考虑用矩阵乘法来优化递推:

    

代码

 #include <bits/stdc++.h>
using namespace std;
#define LL long long struct Martix
{
LL a[][];
Martix friend operator * (Martix x, Martix y)
{
Martix ans;
memset(ans.a, , sizeof(ans));
for(int i = ; i <= ; ++ i)
for(int j = ; j <= ; ++ j)
for(int k = ; k <= ; ++ k)
ans.a[i][j] = (ans.a[i][j] + (x.a[i][k] * y.a[k][j]) % ) % ;
return ans;
} Martix friend operator % (Martix x, int m)
{
for(int i = ; i<= ; ++ i)
for(int j = ; j <= ; ++ j)
x.a[i][j] = x.a[i][j] % m;
return x;
}
};
int m, n;
LL f[], sum[];
Martix ksm(Martix x, LL b, LL mod)
{
Martix ret;
memset(ret.a, , sizeof(ret.a));
for(int i = ; i <= m; ++ i) ret.a[][i] = f[i];
for(;b; b >>= , x = (x * x) % mod)
if(b & ) ret = (ret * x) % mod;
return ret;
} int main()
{
// freopen("fyfy.in","r",stdin);
// freopen("fyfy.out","w",stdout);
LL ans = ;
Martix zy;
memset(zy.a, , sizeof(zy.a));
scanf("%d%d", &m, &n);
if(n > m)
{
for(int i = ; i <= m; ++ i) zy.a[i][m] = , f[i] = ;
for(int i = ; i <= m; ++ i) zy.a[i][i - ] = ;
for(int i = ; i <= m; ++ i)
for(int j = ; j < i; ++ j)
f[i] = f[i] + f[j];
zy = ksm(zy, n - , );
// for(int i = 1; i <=m; ++ i)
// ans = (ans + ((long long)f[i] * zy.a[i][1]) % 7777777) % 7777777;
printf("%lld\n", zy.a[][]);
}
else
{
for(int i = ; i <= n; ++ i) f[i] = sum[i - ] + , sum[i] = sum[i - ] + f[i];
printf("%lld\n", f[n]);
}
return ;
}

考场上写Wa掉了,可我怎么也没想到是把转移矩阵和初始向量相乘的时候算错了,为了避免这个问题我们可以把初始向量放在快速幂的0次矩阵的第一行,这样就不会错了。

    

Fy's dota2 题解的更多相关文章

  1. Fy's dota2

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

  2. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  3. PAT 甲级真题题解(1-62)

    准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format  模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...

  4. Connections in Galaxy War (逆向并查集)题解

    Connections in Galaxy War In order to strengthen the defense ability, many stars in galaxy allied to ...

  5. POJ - 题解sol[暂停更新]

    初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...

  6. HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. SPOJ LAS(BFS)题解

    题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...

  8. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

  9. 题解【bzoj2733 [HNOI2012]永无乡】

    Descriprition 两种操作 把两个集合并起来 求一个集合中的第 \(k\) 大(的编号) \(n \leq 10^5\) Solution 平衡树的板子题之一 维护两个点连不连通直接并查集 ...

随机推荐

  1. maven 引入本地 jar

    $ 参考1 : https://www.cnblogs.com/lixuwu/p/5855031.html ! 注: 参考1中的第二种方法,作者并未实际尝试,我尝试了,虽然在eclipse 中编译不报 ...

  2. mysql记录数据库中重复的字段的数据

    SELECT    SUM(co)FROM    (        SELECT            telephone,            count(telephone) AS co     ...

  3. JAVA 中 if和while的区别

    while和if本身就用法不同,一个是循环语句,一个是判断语句. if 只做判断,判断一次之后,便不会再回来了while 的话,循环,直到结果为false,才跳出来 链表的结构,要一直读下去,直到读完 ...

  4. 牛客网Java刷题知识点之为什么HashMap和HashSet区别

    不多说,直接上干货! HashMap  和  HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...

  5. DotNetCore跨平台~xUnit和测试报告

    在进入dotnet core时代之后,测试驱动开发TDD的主要工具不再是微软的nunit,取而代之的是更通用的xunit,微软把它集成到了dotnetcore的项目里,在安装完成vs2017之后,你可 ...

  6. 如何给swing加上alt+x和ctrl+x快捷键

    1.给菜单栏上的菜单alt+x快捷键非常简单: private JMenu helpInfo = new JMenu("帮助"); helpInfo.setMnemonic(Key ...

  7. 在List中常用的linq表达式

    为了下面举例方便,先声明一个集合: public List<Model.Resume> GetResumeList() { var list = new List<Model.Res ...

  8. html笔记【重新学习】

    <a></a>超链接标签: a标签有个target属性,<a href="#" target = "_self">在当前选项 ...

  9. 22_AOP_切面——静态切面

    [Spring AOP 如何定位连接点] 1.增强提供了连接点的方位信息:如织入到方法前面.后面等. 2.切点描述的是织入到哪些类的哪些方法上. [切点] Spring通过org.springfram ...

  10. Android 从 Web 唤起 APP

    前言 知乎在手机浏览器打开,会有个 App 内打开的按钮,点击直接打开且跳转到该详情页,是不是有点神奇,是如何做到的呢? 效果预览 Uri Scheme 配置 intent-filter Androi ...