YYHS-Floor it
题目描述
输入
输出
样例输入
样例输出
提示
题解
先不管p,通过列举前面几项,不难发现当i为偶数时,a[i]=a[i-1]+a[i-2],当i为奇数时,a[i]=a[i-1]+a[i-2]+1,具体证明还不会,希望有大佬能在讨论区讲讲
知道了a[i]的通项后,我们可以通过矩阵乘法的快速幂log(n)来求出答案。
具体怎么做,我们可以两项两项的来做,最后再判断一下n的奇偶性就可以了。
不过我是用3维矩阵来做的
刚开始的ans为
0 | 0 | 0 |
0 | 0 | 0 |
1 | 2 | 1 |
ans[3][1]表示a[i-1],ans[3][2]表示a[i]
1 | 1 | 0 |
1 | 2 | 0 |
1 | 1 | 1 |
刚开始Matrix_pow(n/2-1,p),具体为什么是这样可以代一个n=2进去,这样Matrix_pow不会做,再判断n为偶数,那么答案就是ans[3][2],发现是正确的
0 | 1 | 0 |
1 | 1 | 0 |
0 | 1 | 1 |
最后答案就是ans[3][2]
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,p;
ll tmp[][],temp[][],ans[][],c[][];
void Matrix_mul(ll a[][],ll b[][]){
for (int i=;i<=;i++)
for (int j=;j<=;j++){
c[i][j]=;
for (int k=;k<=;k++)
c[i][j]=(c[i][j]+a[i][k]%p*b[k][j]%p)%p;
}
}
void Matrix_pow(ll n){
while (n>){
if (n%){
Matrix_mul(ans,tmp);
memcpy(ans,c,sizeof(ans));
}
Matrix_mul(tmp,tmp);
memcpy(tmp,c,sizeof(tmp));
n>>=;
}
}
int main(){
scanf("%lld%lld",&n,&p);
if (!n||n==){ printf("%lld\n",%p); return ; }
tmp[][]=; tmp[][]=; tmp[][]=; tmp[][]=; tmp[][]=; tmp[][]=; tmp[][]=;
ans[][]=; ans[][]=; ans[][]=;
temp[][]=; temp[][]=; temp[][]=; temp[][]=; temp[][]=;
Matrix_pow(n/-);
if (n%){
Matrix_mul(ans,temp);
memcpy(ans,c,sizeof(ans));
}
printf("%lld\n",ans[][]);
return ;
}
YYHS-Floor it的更多相关文章
- SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等
在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...
- SQL中Round(),Floor(),Ceiling()函数的浅析
项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...
- 精灵方向移动问题[math.floor]
local xd = math.cos(math.rad(self._direction));--self._direction方向角度 local yd = math.sin(math.rad(se ...
- javascript中针对float的ceil及floor
function floorFloat(num, precision) { return +(Math.floor(+(num + 'e' + (precision))) + 'e' + -(prec ...
- 函数floor(n)
Matlab函数floor(n): 仅取整数部分,剔除小数部分 例如: floor(9.2)=9; 仅此
- mathlab之floor,ceil,round,int以及fix函数
建议自己动手敲敲,网上很多人自己都没搞清楚然后好多错的.毕竟自己亲眼看到结果才有说服力. 以下是我亲眼见到的结果. 1.double floor(double)函数 floor()函数是常用的取整函数 ...
- JavaScript的几种Math函数,random(),ceil(),round(),floor()
1.Math.random():返回 0 ~ 1 之间的随机数.2.Math.ceil():返回值:返回大于或等于x,并且与之最接近的整数(如果x是正数,则把小数"入":如果x是负 ...
- php函数 ceil floor round和 intval
1.ceil 如果有小数部分 则进一位 < ?php echo ceil(4.3); echo ceil(9.999); ?> 2.floor 舍小取整 < ? php echo f ...
- 报错注入分析之(count()、rand()、group by)分析,被大佬称为floor报错注入
PS:在这几天的学习当中很多的文章都将此注入方式称之为“floor报错分析”但经过我这几天的学习.个人觉得不该如此称呼!若君有意请详细阅读此篇文章.特别感谢米怀特的开导,说句实在的研究这个注入有四天了 ...
- 如何在一个页面后面随机跳转到多个链接地址Math.floor()和Math.random()
点击一个标签随机跳转到多个链接地址,主要运用javascript中的Math.floor()和Math.random()方法 floor(x) 方法是向下去整数 参数为任意数值或表达式. floor( ...
随机推荐
- APP应用测试技巧
分页数据 测试分页数据,必须要满足一页数据,根据APP设置的分页数据准备一些测试数据. 满足一页数据的时候上下滑动瀑布流时, 页面数据是否会正常展示: 是否会出现第二页请求不到数据: 是否会出现重复加 ...
- Spring Boot 出现 in a frame because it set 'X-Frame-Options' to 'DENY'
在spring boot项目中出现不能加载iframe 页面报一个"Refused to display 'http://......' in a frame because it set ...
- fs模块练习
1.fs+path练习01.判断 当前路径下的public是否存在,不存在则创建02.判断 public下的index.html文件是否存在,不存在则创建 <h1>index</h1 ...
- linux下mysql忘记密码的解决方案
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地 ...
- PYQT4 : QSystemTrayIcon练习
照着demo自己做了一遍,练练手 import sys from PyQt4 import QtGui from PyQt4 import QtCore class SysTray(QtGui.QDi ...
- python+selenium自动化软件测试(第15章):基础实战(2)
#coding:utf-8 #for windows/py2.7 from time import sleep from selenium import webdriver browser = web ...
- python常用的数据结构运行效率分析
1.while循环和for循环相同条件下的运行效率比较: 如下代码: import time as tm import timeit as tt import random as rm def whi ...
- 超简单使用批处理(batch)操作数据库
超简单使用批处理(batch)操作数据库 批处理(batch)是什么 批处理的执行就好比快递员的工作: 未使用批处理的时候,快递员一次从分发点将一件快递发给客户: 使用批处理,则是快递员将所有要派送的 ...
- Eclipse常用快捷键和调试方法
原文链接:http://my.oschina.net/u/1054538/blog/741561 常用快捷键 Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事 ...
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...