CF 1970 E3

news/2025/1/15 15:24:24/文章来源:https://www.cnblogs.com/yaosicheng124/p/18405810

题目描述

\(N\) 个小屋,每条小屋有 \(s_i\) 条短径,\(l_i\) 条长径通向湖。

每天,你将从一个小屋出发,先走到湖再走到另一个小屋(可以是一开始的小屋),但其中必须至少有一条通过的小径是短径。

一开始你在 \(1\) 号小屋,求走 \(M\) 天的方案数。

思路

由于把小屋当做状态的时间复杂度至少 \(O(N^2)\),所以考虑从湖开始走。

我们令 \(dp_{i,0/1}\) 表示在第 \(i\) 天回到湖,走的最后一条道路是短/长径的方案数。

我们有转移:

\[\begin{array}{l} dp_{i,0}=dp_{i-1,0}\cdot\sum \limits_{j=1}^N (s_j+l_j)\cdot s_j+dp_{i-1,1}\cdot\sum \limits_{j=1}^N s_j^2\\ dp_{i,1}=dp_{i-1,0}\cdot\sum \limits_{j=1}^N (s_j+l_j)\cdot l_j+dp_{i-1,1}\cdot\sum \limits_{j=1}^N s_j\cdot l_j \end{array} \]

这个转移可以用矩阵乘法加速,这样每次乘法只有 \(2^2=O(1)\)

空间复杂度 \(O(N)\),时间复杂度 \(O(N+\log M)\)

代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 100001, MOD = int(1e9) + 7;struct Matrix {int n, m, mat[3][3];void Clear(int a, int b) {n = a, m = b;for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {mat[i][j] = 0;}}}Matrix operator*(const Matrix &b) {Matrix ret;ret.Clear(n, b.m);for(int i = 1; i <= n; ++i) {for(int j = 1; j <= b.m; ++j) {for(int k = 1; k <= m; ++k) {ret.mat[i][j] = (ret.mat[i][j] + 1ll * mat[i][k] * b.mat[k][j] % MOD) % MOD;}}}return ret;}
}mat;int n, m, a[MAXN], b[MAXN], ans;Matrix Pow(Matrix x, Matrix a, int b) {for(; b; a = a * a, b >>= 1) {if(b & 1) {x = x * a;}}return x;
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; ++i) {cin >> a[i];}for(int i = 1; i <= n; ++i) {cin >> b[i];}mat.Clear(2, 2);for(int i = 1; i <= n; ++i) {mat.mat[1][1] = (mat.mat[1][1] + 1ll * (a[i] + b[i]) * a[i] % MOD) % MOD;mat.mat[1][2] = (mat.mat[1][2] + 1ll * (a[i] + b[i]) * b[i] % MOD) % MOD;mat.mat[2][1] = (mat.mat[2][1] + 1ll * a[i] * a[i] % MOD) % MOD;mat.mat[2][2] = (mat.mat[2][2] + 1ll * a[i] * b[i] % MOD) % MOD;}Matrix res;res.Clear(1, 2);res.mat[1][1] = a[1], res.mat[1][2] = b[1];Matrix x = Pow(res, mat, m - 1);for(int i = 1; i <= n; ++i) {ans = (0ll + ans + 1ll * x.mat[1][1] * (a[i] + b[i]) % MOD + 1ll * x.mat[1][2] * a[i] % MOD) % MOD;}cout << ans;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linguistics-English-时态16种:4种时间4种状态 + 16种时态详解 + 8种时态的被动语态

时态16种: 4种时间 4种状态时态标志词 + 时态详解 + 8种语态的被动语态:

雨量监测系统需要哪些设备,带你360度无死角了解雨量监测系统

作为星创易联技术支持林工,我很高兴为大家介绍我们公司的雨量监测系统。在过去的几年里,我亲自参与了多个雨量监测项目的设计、部署和维护工作,积累了丰富的实践经验。今天,我将详细介绍我们的雨量监测系统,包括其组成部分、工作原理、应用场景以及部署注意事项。有兴趣的…

基础漏洞

目录 目录目录一、暴力破解漏洞描述无防护措施锁定机制验证码绕过二、xss漏洞(跨站脚本攻击)分类反射型(非持续型)攻击步骤存储型(持续型)攻击步骤DOM型危害三、CSRF漏洞(跨站请求伪造)四、SQL注入漏洞描述注入分类SQL注入分类及判断判断是否存在 Sql 注入漏洞判断 Sql…

LLog:Spring轻量级请求日志监控组件,集成管理面板,支持多条件查询检索

开源地址 https://gitee.com/lboot/LLog 简介 LLog是基于AOP构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录、查询检索等功能。请求状态、时间、来源、耗时,请求参数,响应结果,作用接口记录支持与鉴权服务结合,记录请求来源为用户…

如何实现深拷贝?structuredClone

经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方法的熟悉程度。今天来介绍另一个方案structuredClone()。什么是 struct…

信奥一本通题陈老师解题:1209:分数求和

​ 【题目描述】【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10; 接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。【输出】输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。【输…

【OpenFeign 】OpenFeign 下的重试器的执行过程分析

1 前言 上节我们看了下 OpenFeign 里的重试,在从源码的角度看它的执行原理的时候,又意外的遇到了一个【OpenFeign 】OpenFeign 下未开启重试,服务却被调用了两次 的问题的分析,那本节我们就来看看重试器的一个入场以及执行的过程。 2 源码分析 首先我们要知道在默认的情况…

WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7

前面我们介绍了 802.11 b/g/n 的一些核心技术和基础概念,本章将介绍目前比较新的 WiFi5 和 WiFi6,以及在今年会发布的 WiFi7。liwen01 2024.09.08 前言 经过二十多年的发展,WiFi 在硬件能力、软件和算法、频谱资源、市场需求、电源与能效方面都有了很大的提升。所以我们能看…

一个类才几百行/搞定各种自定义委托/涵盖各种场景需求/所有委托一网打尽/用法极其简单

一、应用场景某个字段需要提供下拉框进行选择,下拉框可选是否允许编辑。 某个字段需要提供密码框进行输入,密文显示字段值。 某个字段需要提供日期框下拉选择日期时间。 某个字段需要提供微调框设定值。 某个字段需要提供进度条显示字段值。 某个字段列需要禁用。 各种委托控…

军工厂电气工程师到知名互联网公司程序员,我吃饭的家伙有哪些

大家好,我是欧阳。今年刚好是欧阳三十而立之年,虽然没有立起来。这篇文章来聊聊我从一名军工厂电气工程师到某知名互联网公司程序员,这期间我吃饭的家伙都有哪些。 军工厂期间 欧阳大学读的是“电气工程及其自动化专业”,毕业后进入了老家的一个军工厂,成为了一名电气工程…

用 SQL 写的俄罗斯方块游戏「GitHub 热点速览」

在开始介绍上周热门开源项目之前,要插播一条开源新闻:Nginx 已正式迁移至 GitHub。 近日,Nginx 官方宣布将 Nginx 开源项目,从 Mercurial 迁移至 GitHub 代码托管平台,并开始接受 PR 形式的贡献、Issues 问题反馈和功能请求等,GitHub 上的 Nginx 项目终于“活”了!GitHu…

喜欢干净简洁音乐播放器的朋友看过来

大家好,我是晓凡。 不少程序员小伙伴都喜欢边听音乐边敲代码,尤其在一个嘈杂的环境中,一个好的想法、好的思路可能就因为一瞬间的干扰就没了。 这时,如果耳机一戴上,听着音乐能更好的集中注意力;遇到bug也能临危不乱,想出更好的解决办法; 网易云音乐,算是一个相对简洁…