3374: H胖胖的健身计划

链接: 我在这里快点我.

题目描述

L老师布置了一道思考题,一个人一次可以上一个台阶,也可以上两个台阶,问上到n级台阶有多少种走法?H胖胖非常聪明,拿出胖胖的小手掐指算起来。登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种方法……所以,1,2,3,5,8,13,……。
H胖胖为了保持身体苗条,给自己制定了一个锻炼计划,决定用刚才计算的数列确定每天自己锻炼的步数,就是说第1天走1步,第2天走2步,第3天走5步,第4天走8步,第5天走13步,……。
H胖胖的同学LYQ正好在学习矩阵相乘,帮他想到了一个快递计算的方法如下公式所示。

H胖胖拿出手机查阅了快速幂的百度百科,看到如下信息:
快速幂
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
以下以求a的b次方来介绍:
把b转换成二进制数。
该二进制数第i位的权为
例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算

但是H胖胖的手机太不给力,后面的代码实在看不清了,请正在做题的你帮帮他吧。

输入
一个整数n(0<n<10^12)
输出
H胖胖走的步数%100007的结果

样例输入

6

样例输出

13

思路:
题目数据范围太大,暴力会T。所以我们考虑用矩阵快速幂来做,初始化一个单位矩阵,再重载一下乘法,最后求出来左边矩阵的n-2次方,再和右边矩阵相乘得出一个两行一列的矩阵,第一个元素就是我们要的答案,再模10007就解决了。

AC代码:

#include <bits/stdc++.h>
#define mod(x)  ((x)%MOD)using namespace std;
typedef long long ll;
const ll maxn = 2;
const ll MOD  = 100007;ll n;
struct mat
{ll m[maxn][maxn];
}unit;mat operator * (mat a, mat b)   // 重载乘法
{mat ret;ll x;// 矩阵相乘for(ll i=0;i<maxn;i++){for(ll j=0;j<maxn;j++){x = 0;for(ll k= 0;k<maxn;k++){x += mod((ll)a.m[i][k]*b.m[k][j]);}ret.m[i][j] = mod(x); //宏定义模100007}}return ret;
}void init_unit()    //初始化一个单位矩阵
{for(ll i = 0; i < 10; i++)unit.m[i][i] = 1;return ;
}mat kpow_mat(mat a, ll b)
{mat ret = unit; //单位矩阵while(b){if(b&1) ret = ret * a;  // 这里我们在重载乘法的时候就已经模100007了a = a * a;b>>=1;}return ret ;
}int main()
{init_unit();scanf("%lld", &n);mat a,b;if(n == 1 || n == 2 || n == 3){printf("%lld", n);}else {b.m[0][0] = 1, b.m[1][0] = 1;b.m[0][1] = 1, b.m[1][1] = 0;a.m[0][0] = 2, a.m[0][1] = 1;b = kpow_mat(b, n-2);a = a*b;printf("%lld", a.m[0][0]%MOD);}
}

YTU 3374: H胖胖的健身计划相关推荐

  1. YTU之挑剔的H胖胖

    题目描述 最近H胖胖可爱吃东西了,既想吃草莓,又想吃菠萝,还想吃肉夹馍,可是他有点挑剔,想吃的任何东西都有一个最小值(本胖胖最少要这些才不会不高兴),当然也有最大值(给本胖胖过多,本胖胖也不会喜欢的) ...

  2. LeetCode 1176. 健身计划评估(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 你的好友是一位健身爱好者.前段日子,他给自己制定了一份健身计划.现在想请你帮他评估一下这份计划是否合理. 他会有一份计划消耗的卡路里表,其中 calori ...

  3. keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!

           Rabbitta Hole         Welcome to your wonderland ! 不知不觉夏天就到了,又是吊带短裤比基尼.西瓜可乐冰淇淋的季节.待在清凉的空调房里比冬 ...

  4. 肺炎期间,送上一份家庭健身计划

    目录 一.运动学基础知识 1.1运动能量系统与代谢特征 1.2动态热身运动 1.3抗阻训练 1.4爆发力训练 1.5无氧训练 1.6有氧训练 二.EPOC高效减肥 三.OPT模型 四.训练计划的制定步 ...

  5. 如何进入训练模式_健身计划非常重要,对于健身小白,新手期和成长期该如何制定?...

    相信大家都知道,新手小白和一个有两年健身基础的朋友需要使用的训练计划肯定是不一样的,这样才能更好地持续增加肌肉力量. ​ 健身计划是每个刚开始进入健身房运动的人首先应该考虑的一件事,制定一个适合自己的 ...

  6. YOJ3394-挑剔的H胖胖

    题目描述 最近 H 胖胖可爱吃东西了,既想吃草莓,又想吃菠萝,还想吃肉夹馍,可是他有点挑剔,想吃的任何东西都有一个最小值(本胖胖最少要这些才不会不高兴),当然物以稀为贵,物品也不是管够的(本胖胖想要的 ...

  7. 哇!全民健身计划2025

    就在刚刚,微博占据热搜第一的是"全民健身计划2025",这条消息刚刚出来,就瞬间得到了很多响应. 因为现在人们的压力越来越大,不管是家庭的,还是公司的.只要人压力大起来,就会找解压 ...

  8. php周计划表_初学者健身计划一周表精华版

    对于才接触健身的训练者来说,内心通常都是比较兴奋的,也会非常好奇,到底怎样健身才会又快又好.不过,因为对自己还不是特别了解,身体各方面的素质还有待开发,所以,初学者也会时常感到困惑,最常做的就是模仿那 ...

  9. 「跑付」长沙健身服务中心响应全民健身计划,创造更好的运动环境

    跑付长沙健身房开业,积极响应全民健身计划 2022年7月17日,位于长沙市岳麓区观沙岭街道银杉路农房观沙国际(光明E城)ET栋3楼的跑付长沙健身房开始试营业,8月8日正式营业. 跑付长沙时代从不拒绝弄 ...

最新文章

  1. OneAPM挂牌新三板,续写 ITOM 新篇章
  2. compareHist函数
  3. Vue.js组件化开发实践
  4. 本文为 2021 年 5 月知识总结
  5. 五笔输入法的学习记录
  6. 华为NP课程笔记8-BGP2
  7. 新挑战新思路|山石网科互联网企业安全SD-WAN解决方案
  8. Spring之Bean后处理器——BeanPostProcessor的使用与源码解析
  9. 月薪过万的java程序员需要什么能力_什么样能力的Java程序员月薪过万
  10. HbuilderX连接夜神模拟器教程
  11. Python初学之温度转换
  12. 延时调用的时候要注意
  13. Linux下命令行中的复制和粘贴
  14. 无缝切地图的3D赛车游戏火了,小哥花16个月用JS打造,浏览器免费就能玩
  15. 是计算机实现研究的内容,计算机硕士论文开题报告分享
  16. VC++对话框的任意扩展
  17. 【matplotlib复杂的频数分布直方图】多子图,共享横纵坐标名,横坐标位置居中及标签显示,显示每个bar的频数
  18. linux mint安装金山快盘
  19. 通过HWND取得pid以及HANDLE
  20. Zblog如何使用PHP插件搭建微信小程序-从0到100完整教程

热门文章

  1. CentOS 7 安装Broadcom无线网卡
  2. Ubuntu 15.10下安装broadcom无线网卡驱动
  3. 信阳市浉河区最美奋斗者
  4. 用HijackThis或卡卡安全助手轻松去除Win XP任务栏里的蓝色五角星
  5. sony相机照片恢复|Mac电脑sony相机照片误删了怎么恢复?
  6. gridfs文件服务器,OWA实现Word在线编辑(以GridFs存储文件)
  7. 决策树分类算法(if-else原理)
  8. Flutter 2.2 现已发布!
  9. 我的世界java版合成表_合成 - Minecraft Wiki,最详细的官方我的世界百科
  10. 家电生产线数控机床上下料长臂机器人组设计