强(矩阵快速幂)

news2024/11/28 21:59:31

题目描述

Lh:粉兔你教我一下抽屉原理吧

Clz:就是给你一个长度为 n 的序列,每个数只能取 0,1,2,那你连续取三个数必然有两个相等……

Lh:等等你梭啥,再说一遍

Clz:……emmm 当我没说

Marser:就是一个序列,对于每一个连续三元组都要满足其中至少有两个相等

现在粉兔问你:有多少个长度为 n 的序列满足粉兔的要求?请对 19260817 取模。

输入

一行一个正整数n(3≤n≤1018)。

输出

一行一个整数,含义如题。

样例输入 Copy

4

样例输出 Copy

51

                                                        

 思路:

令f[n]为长度为n的合法序列数量

假设序列 s-1的末尾两个数相同则s有三种选法,如果不同有两种选法。

s-1末尾相同的选法可以由f[s-2]表示.则f[n]=2*f[n-1]+f[n-2]

想这种类似斐波拉且的递推是,可以用矩阵快速幂优化。

Code:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<unordered_map>
using namespace std;
#define x first
#define y second
#define PII pair<int,int>
#define V vector<int>
#define endl "\n"
typedef long long ll;
typedef unsigned long long llu;
const int INF=0x3f3f3f3f,mod=19260817;
struct matrix 
{
    ll mat[2][2];
    void init() {
        memset(mat,0,sizeof mat);
    }
};
matrix mul(matrix a,matrix b)
{
    matrix c;
    c.init();
    for(int i=0;i<2;i++) {
        for(int j=0;j<2;j++) {
            for(int k=0;k<2;k++) {
                c.mat[i][j]+=(a.mat[i][k]%mod)*(b.mat[k][j]%mod)%mod;
                c.mat[i][j]%=mod;
            }
        }
    }
    return c;     
}
matrix ksm(matrix a,ll n)
{
    matrix b;
    b.init();
    for(int i=0;i<2;i++) b.mat[i][i]=1;
    while(n)
    {
        if(n&1) b=mul(b,a);
        a=mul(a,a);
        n>>=1;
    }
    return b;
}
int main()
{
    //f[n]=2*f[n-1]+f[n-2]
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    ll n;
    cin>>n;
    if(n==3) cout<<21;
    else if(n==4) cout<<51;
    else 
    {
        matrix a,res,ans;
        a.mat[0][0]=2;
        a.mat[0][1]=a.mat[1][0]=1;
        a.mat[1][1]=0;
        res=ksm(a,n-4);
        ans.init();
        ans.mat[0][0]=51;
        ans.mat[0][1]=21;
        ans=mul(ans,res);
        cout<<ans.mat[0][0];
    }
    return 0;
}

形如:f[n]=a*f[n-1]+b*f[n-2]+c

可用矩阵乘积形式表示

\bigl(\begin{smallmatrix} f(n)\\f(n-1) \\ c \end{smallmatrix}\bigr)=\bigl(\begin{smallmatrix} a& b & 1\\ 1& 0 &0 \\ 0& 0 & 1 \end{smallmatrix}\bigr)\bigl(\begin{smallmatrix} f(n-1)\\f(n-2) \\ c \end{smallmatrix}\bigr)

形如:f[n]=c^n-f[n-1]

\bigl(\begin{smallmatrix} f(n)\\c^n \end{smallmatrix}\bigr)=\bigl(\begin{smallmatrix} -1 &c \\ 0& c \end{smallmatrix}\bigr)\bigl(\begin{smallmatrix} f(n-1)\\c^{n-1} \end{smallmatrix}\bigr)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试框架 Jest 实用教程

官网 https://jestjs.io/docs/getting-started 安装 cnpm i --save-dev jest使用 在项目中的任意位置&#xff08;通常单独建个名为 test 的文件夹&#xff09;新建以 .test.js 为后缀的测试文件&#xff0c;如 expect.test.js &#xff08;若项目中有 test.js 存在&#xff0c…

【阶段三】Python机器学习10篇:机器学习项目实战:K近邻算法的基本原理、计算步骤与KNN(K近邻)分类模型

本篇的思维导图: K近邻算法(英文为K-Nearest Neighbor,因而又简称KNN算法)是非常经典的机器学习算法。 K近邻算法的基本原理 K近邻算法的原理非常简单:对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K个数…

设计模式——备忘录模式

备忘录模式一、基本思想二、应用场景三、结构图四、代码五、优缺点5.1 优点5.2 缺点一、基本思想 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫…

Bilibili支持了AV1编码,关于AV1编码你知道吗?

Bilibili支持了AV1编码&#xff0c;关于AV1编码你知道吗&#xff1f; AV1编码是一种新的视频编码标准&#xff0c;由联合开发的开源编码器&#xff0c;它由英特尔、微软、谷歌、苹果、Netflix、AMD、ARM、NVIDIA和其他一些公司共同开发&#xff0c;旨在替代H.264和HEVC等现有的…

Word控件 Aspose.words for.NET 授权须知

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

实验 2 灰度变换与空间滤波

目录实验 2 灰度变换与空间滤波一、实验目的二、实验例题1. 灰度变换函数 imadjust2. 使用对数变换压缩动态范围。3. 直方图均衡化 histogram equalization实验 2 灰度变换与空间滤波 一、实验目的 掌握灰度变换的原理和应用。掌握对数变换、幂律变换和直方图均衡化的原理和应…

融合注意力模块SE基于轻量级yolov5s实践路面坑洼目标检测系统

在很多的项目实战中验证分析注意力机制的加入对于模型最终性能的提升发挥着积极正向的作用&#xff0c;在我之前的一些文章里面也做过了一些尝试&#xff0c;这里主要是想基于轻量级的s系列模型来开发构建路面坑洼检测系统&#xff0c;在模型中加入SE注意力模块&#xff0c;以期…

Android开发-AS学习(二)

1.5 ProgressBar常用属性描述android:max进度条的最大值android:progress进度条已完成进度值android:indeterminate如果设置为true&#xff0c;则进度条不精确显示进度style“&#xff1f;android:attr/progressBarStyleHorizontal"水平进度条MainActivity.java package c…

机试_1_暴力求解

一、枚举 判断是否可以使用枚举&#xff1a;分析数据量。 若时间限制在1000ms的情况下&#xff0c;大约可以进行10⁷的运算。 复杂度数据量O(n!)10O(2ⁿ)20O(n)200O(n)3000O(nlogn)10⁶O(n)10⁷O(√10)10⁴O(logn)>10⁰1 abc–清华大学 描述 设a、b、c均是0到9之间的数字…

Java课程设计——学生成绩管理系统

1 需求分析1.1 需求分析概述需求分析是开发软件系统的重要环节&#xff0c;是系统开发的第一步和基础环节。通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等&#xff0c; 为系…

nacos的配置管理

前言 此博客对nacos的配置管理进行简单介绍&#xff0c;如果降配置文件放在项目中&#xff0c;那么每次进行修改后都要重新编译部署项目&#xff0c;是极其不方便的&#xff0c;如果将配置文件放在一个固定的位置&#xff0c;尽管解决了以上的问题&#xff0c;但是管理起来还不…

【Java寒假打卡】Java基础-File

【Java寒假打卡】Java基础-File概述-三种构造方法绝对路径和相对路径File的创建功能File的删除功能File的判断和获取功能listFile方法练习1&#xff1a;在当前模块下面aaa文件夹创建一个文件a.txt练习2&#xff1a;删除一个多级文件夹练习3&#xff1a;统计一个文件夹中每一种文…

UE插件和项目目录结构学习笔记

Plugins插件的二种安装方式 1、安装到虚幻引擎&#xff08;推荐&#xff09; 转到虚幻引擎安装位置的插件文件夹 Engine/Plugins 将解压得到的插件文件夹放入Marketplace文件夹下&#xff08;如没有新建一个&#xff09;。 启动虚幻引擎打开项目&#xff0c;菜单->编辑->…

如何在线免费将PPT转PDF格式

我们经常会遇到制作演示文稿PPT的格式&#xff0c;但是这种格式一般在传阅的过程中稳定性都较差&#xff0c;所以很多人会选择转成PDF格式&#xff0c;那么有没有免费的处理方式呢&#xff1f; 打开浏览器搜索speedpdf找到并打开在线转换工具首页&#xff0c;选择主页上的PPT转…

Python表白妙招,把情书写进她的照片里

前言 我的好兄弟们&#xff0c;2022年可算是过去了&#xff0c;这不马上要过年了吗 就是说&#xff0c;各位兄弟有对象了吗&#xff0c;没有的回家还要面对亲戚的各种提问 退一步来说&#xff0c;有心仪的人吗&#xff0c;如果有的话&#xff0c;就来看看这篇 程序员的表白小…

【Vue + Koa 前后端分离项目实战7】使用开源框架==>快速搭建后台管理系统 -- part7 前端实现最新期刊管理【增删查改】

人生没有白走的路&#xff0c;每一步都作数。 对应后端部分章节回顾&#xff1a; 【Vue Koa 前后端分离项目实战5】使用开源框架&#xff1e;快速搭建后台管理系统 -- part5 后端实现最新期刊列表管理【增删查改】_小白Rachel的博客-CSDN博客 效果展示&#xff1a; 目录 一、…

少儿Python每日一题(15):回文数

原题解答 本次的题目如下所示: 【编程实现】 回文数是指一个像14641这样“对称”的数,即:将这个数的各位数字按相反的顺序重新排列后,所得到的数和原来的数一样。请编程求不同位数数字的回文数的个数。用户输入一个正整数M(2<M<7),M作为回文数的位数。要求输出M位…

【Javascript】高阶函数,JSON

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录高阶函数箭头函数apply函数JSON高阶函数 把函数作为参数&#xff0c;或者返回一个函数&#xff…

【并发】并发锁机制-深入理解synchronized(一)

【并发】并发锁机制-深入理解synchronized&#xff08;一&#xff09; synchronized 基础篇&#xff08;使用&#xff09; 一、Java共享内存模型带来的线程安全问题 1. 代码示例 2. 运行结果 3. 问题分析 4. 临界区&#xff08;Critical Section&#xff09; 5. 竞态条件…

【Go】内存模型中的内存可见性

前言 使用go必然会使用到协程以及其他的并发操作&#xff0c;初期学习的时候&#xff0c;经常在启动协程时操作变量出现问题&#xff0c;要么就是变量没更新&#xff0c;要么就是各种崩溃&#xff0c;或者vscode报告警之类的&#xff0c;于是浅看了一下Go的内存模型&#xff0…