gym 102302 2019 USP-ICMC H-Log Concave Sequences (dp + 矩阵快速幂优化)

2023-05-16

题目:
传送门

思路:
      我们可以先写出转移方程,发现该方程是一个不变的递推式,我们考虑用矩阵快速幂来优化这个递推式.

完结撒花…

AC_Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

const long long mod = 1e9+7;

long long n,UP;

struct mat
{
    long long mn[9][9];   
    mat() {
        for(int i = 0;i<UP;i++) {
            for(int j = 0;j<UP;j++) {
                mn[i][j]=0;
            }
        }
        for(int i = 0;i<UP;i++) {
            mn[i][i] = 1;
        }
    }
    mat operator * (const mat& a) {
        mat res;
        for(int i = 0;i<UP;i++) {
            res.mn[i][i] = 0;
        }
        for(int i=0;i<UP;i++) {
            for(int j=0;j<UP;j++) {
                for(int k=0;k<UP;k++) {
                    res.mn[i][j] += mn[i][k]*a.mn[k][j]%mod;
                    res.mn[i][j] %= mod;
                }
            }
        }
        return res;
    }
};


mat fast(mat a,long long c) {
    mat res = mat();
    while(c) {
        if(c&1) res  = res * a;
        a = a*a;
        c >>= 1;
    }
    return res;
}


mat ans;
mat res;

int main() {
    UP = 9;
    scanf("%lld",&n);
    for(int i = 0;i<9;i++) for(int j =0;j<9;j++) res.mn[i][j] = ans.mn[i][j] = 0;
    //这里我是在枚举转移方式,看不懂的小伙伴直接打出来也可以
    for(int i = 0;i<3;i++) {
        for(int j = 0;j<3;j++) {
            for(int k = 0;k<3;k++) {
                if(k*j<=i*i) res.mn[k*3+i][i*3+j] = 1;
            }
        }
    }
    for(int i = 0;i<9;i++) ans.mn[0][i] = 1;
    res = fast(res,n-2);
    ans = ans * res;
    long long sum =0;
    for(int i=0;i<9;i++) sum += ans.mn[0][i],sum%=mod;
    printf("%lld\n",sum); 
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gym 102302 2019 USP-ICMC H-Log Concave Sequences (dp + 矩阵快速幂优化) 的相关文章

  • 如何关闭鼠标加速效果

    如何关闭鼠标加速效果 一 第一项二 第二项 如果要关闭鼠标加速 xff0c 一共需要改变两项设置 xff0c 缺一不可 一 第一项 1 按下win 43 R键 xff0c 然后输入control xff0c 点击确定 2 点击轻松使用 3
  • [算法设计题] 判断回文字符序列

    判断回文字符序列 要求 如 abcba 是回文 xff1b good 就不是回文 算法思想 对字符串的前一半进行入栈操作 xff0c 然后从栈里回去栈顶元素与字符串的后一半第一个字符进行比较 若相等则重复此操作 否则可以直接判断改字符序列不
  • Autoware1.14运行官网Demo 适配镭神激光雷达

    项目场景 xff1a Autoware1 14 运行官网demo 适配镭神16线激光雷达 运行官网Demo 1 创建 autoware文件夹 xff0c 下载官网数据包 xff0c 并解压 span class token function
  • 磁盘问题--系统盘出现只读现象( read-only file system)

    一 说明现象原因 1 问题现象 xff0c 创建文件或者创建目录都只读 touch cannot touch file test read only file system 2 问题说明 当文件系统自身的校验机制发现文件系统存在问题时 xf
  • 第十一周作业-必做3

    题目描述 xff1a Julius Caesar 曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后 55 位对应的字符来代替 xff0c 这样就得到了密文 比如字符 A 用 F 来代替 如下是密文和明文中字符
  • 实现用python简易演奏《数鸭子》

    前几天上课老师给我们讲了两个模块 xff0c 然后利用这两个模块来模拟钢琴键盘去简单地演奏 数鸭子 今天来分享给大家 模块1 xff1a winsound 模块2 xff1a keyboard winsound xff1a winsound
  • 控制台报错整理

    一 无法将 npm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 xff0c 如果包括路径 xff0c 请确保路径正确 xff0c 然后再试一次 情景 在第一次初启项目时 xff0c 安装好node xff0c
  • git常用命令

    安装git 在git的官网下载需要的版本 安装完成后需要设置用户的用户名和邮箱 git config global user name 34 Your Name 34 例如 xff1a config global user name 34
  • 表格td实现可编辑

    html xff08 elementUi中的表格 xff0c 传入位置和当前值 xff09 methods xff08 生成input xff0c 将当前输入的value值等于当前单元格的值 xff09 handleChangeCorrec
  • vue开发实例

    1 利用三元表达式实现对元素样式动态赋值 2 vue中 实现点击下载图片
  • Elementui 踩过的坑

    select下拉框 这个是Elementui 官网 Select选择器的基础用法 xff0c 现在想要更改它本身自带的默认样式 lt template gt lt el select v model 61 34 value 34 place
  • WSL2图形化界面踩坑记录

    问题 xff1a 启动xfce4时 xff0c 报错 xff1a xfsm manager load session Something wrong with home shenshiyi cache sessions xfce4 sess
  • CSP M1-A 咕咕东的奇遇

    题意 xff1a 字母a z首尾相接成环 xff0c 开始时指针指向a xff0c 圆环可以顺时针或者逆时针旋转 xff0c 给定一个字符串 xff0c 计算旋转依次得到该字符串的每一个字符最少需要转多少格 Input 一个字符串 长度 l
  • pycharm的python库在哪?pip下载的文件放在哪?一个方法,都能找到

    1 打开cmd命令行 2 标题输入pip install xxx库 xff08 1 xff09 如果没下载过 xff0c 那么将正常下载 xff08 2 xff09 若下载过了 xff0c 就会显示你下载的目录 这个目录 c users x
  • 数据库面试知识点

    1 事务及其四个特性 事务是用户定义的一个操作序列 xff0c 这些操作要么全做要么全不做 xff0c 是一个不可分割的工作单位 事务四个特性 xff1a 原子性 一致性 隔离性和持续性 原子性 xff1a 事物中包括的操作要么都做 xff
  • 第六次模拟测试-6

    题目描述 xff1a 石头剪刀布是常见的猜拳游戏 石头胜剪刀 xff0c 剪刀胜布 xff0c 布胜石头 如果两个人出拳一样 xff0c 则不分胜负 一天 xff0c 小A和小B正好在玩石头剪刀布 已知他们的出拳都是有周期性规律的 xff0
  • kali linux教程:配置 Kali 的 apt 命令在线安装包的源为阿里云

    配置 apt 国内源 因为 Kali 自带的源是国外的 xff0c 经常会因为网络问题 xff0c 而无法安装戒更新软件包 而且国外的源速度很慢 所以我们直接使用国内的源 xff0c 方便快速 点击终端按钮戒者右键桌面选择 open in
  • 相关分析和回归分析

    1 相关分析 相关分析是研究两个或两个以上处于同等地位的随机变量间的相关关系的统计分析方法 例如 xff0c 人的身高和体重之间 xff1b 空气中的相对湿度与降雨量之间的相关关系都是相关分析研究的问题 2 回归分析 相关分析与回归分析之间
  • Linux(Debian)下快速安装JDK

    Linux下快速安装JDK 一 前言 linux系统的debain发行版本 博主使用电脑mac 二 Linux系统下载jdk 1 下载JDK上传到linux系统 1 下载jdk版本到自己电脑上 JDK下载地址 下载JDK的Oracle账号
  • LINK1104 无法打开文件“libboost_atomic-vc142-mt-gd-x64-1_76.lib”

    问题描述 LNK1104 无法打开文件 libboost atomic vc142 mt gd x64 1 76 lib 可能原因 xff1a 相应的包没有安装 xff0c 可以再电脑上搜一下 xff0c 是否搜索到 xff0c 如果搜索到

随机推荐