Fy's dota2 题解
题目描述
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 题解的更多相关文章
- Fy's dota2
Fy 觉得自己玩 cf,lol 这种高端游戏已经够厉害了,于 是他决定去玩 dota2.结果 fy 的鼠标右键坏了,所以他就等 到 2250 买了把闪烁匕首,用跳刀前进,准备去送泉水.但 是 fy 一 ...
- noip2010提高组题解
NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...
- PAT 甲级真题题解(1-62)
准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format 模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...
- Connections in Galaxy War (逆向并查集)题解
Connections in Galaxy War In order to strengthen the defense ability, many stars in galaxy allied to ...
- POJ - 题解sol[暂停更新]
初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...
- HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解
Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- SPOJ LAS(BFS)题解
题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
- 题解【bzoj2733 [HNOI2012]永无乡】
Descriprition 两种操作 把两个集合并起来 求一个集合中的第 \(k\) 大(的编号) \(n \leq 10^5\) Solution 平衡树的板子题之一 维护两个点连不连通直接并查集 ...
随机推荐
- spring初始化bean的目的
初始化bean就是为了将所有需要的bean全部装载到容器里面,等我们需要用到哪个bean就将哪个bean从容器里面拿出来
- (转)SSH批量分发管理&非交互式expect
目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3. ...
- nodejs初探(一)nodejs开发环境搭建
简介 JavaScript是一种运行在浏览器的脚本.Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件 ...
- (Frontend Newbie)JavaScript基础之函数
函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...
- Redis启动和关闭
带配置文件启动 ./redis-server redis.conf 关闭 无密码模式 ./redis-cli -h xxx -p xxx shutdown 密码模式 ./redis-cli -h ...
- 九度oj题目1027:欧拉回路
题目1027:欧拉回路 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2844 解决:1432 题目描述: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条 ...
- Spring JdbcTemplate 使用总结
1.查询Object public Classify queryClassifById(int id){ String sql="select * from t_classify where ...
- Redis的Publish/Subscribe
Publish/Subscribe 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...
- hdu 3255 体积并
http://www.cnblogs.com/kane0526/archive/2013/03/07/2948446.html http://blog.csdn.net/acdreamers/arti ...
- 10th week task -2 Object 的起源
Objective-C与C++.Java等面向对象语言类似,不过很多方面有所差别.若是用过另一种面向对象语言,那么就能理解Objective-C所用的许多范式与模版了.然而语法上也许会显得陌生,因为该 ...