热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

省选05.线性代数

P6772[NOI2020]美食家先假设没有美食节,容易得到一个矩阵优化的dp。加上美食节过后分成\(k\)段考虑,每段分别矩阵快速幂,时间复杂度为\(O((5n)^3k\logT

P6772 [NOI2020] 美食家

先假设没有美食节,容易得到一个矩阵优化的 dp。

加上美食节过后分成 \(k\) 段考虑,每段分别矩阵快速幂,时间复杂度为 \(O((5n)^3k\log T)\)

这并不能通过本题。

可以思考快速幂优化乘法的本质,预处理出转移矩阵的 \(2\) 的幂。

原本快速幂是将一堆 \(5n\times 5n\) 的矩阵乘起来,最后再乘一个 \(1\times 5n\) 的矩阵,每一段的时间复杂度达到 \(O((5n)^3\log T)\)

可以考虑使用结合律交换顺序,每一段分别用 \(1\times 5n\) 的矩阵乘一堆 \(5n\times 5n\) 的矩阵,这样复杂度降为 \(O((5n)^2\log T)\)

因此总复杂度降为 \(O((5n)^3\log T+(5n)^2k\log T)\)


CF113D Museum

\(f(u,v)(u\neq v)\) 表示分别从 \(u\)\(v\) 出发,在 \(s\) 相遇的概率。

\(deg(u)\) 表示 \(u\) 的度数。

假设从 \((u,v)\) 走一条边到 \((i,j)\)


\[f(u,v)=p(u)p(v)f(u,v)+\sum_{i\ne u}f(i,v)\frac{1-p(u)}{deg(u)}p(v)+\sum_{j\neq v}f(u,j)\frac{1-p(v)}p(u){deg(v)}+\sum_{i\neq u}\sum_{j\neq v}f(i,j)\frac{(1-p(u))(1-p(v))}{deg(u)deg(v)}

\]

移项得


\[(1-p(u)p(v))f(u,v)-\sum_{i\ne u}f(i,v)\frac{1-p(u)}{deg(u)}p(v)-\sum_{j\neq v}f(u,j)\frac{1-p(v)}{deg(v)}p(u)-\sum_{i\neq u}\sum_{j\neq v}f(i,j)\frac{(1-p(u))(1-p(v))}{deg(u)deg(v)}=0

\]

可以发现 \(f(s,s)=1\),对于不等于 \(s\)\(i\)\(f(i,i)=0\)

因此,这 \(n^2-n\) 个方程每个右边都是一堆关于 \(f(i,i)\) 的线性组合。

左边有 \(n^2-n\) 个未知数,右边有 \(n\) 个参数,对于左边高斯消元即可。

注意特判起点相同的情况。


P2973 [USACO10HOL]Driving Out the Piggies G

对于需要使用高斯消元解决的 dp 问题,必须保证边界值好确定。

\(f(u)\) 表示经过 \(u\) 点的期望次数。


\[f(u)=[u=1]+\sum_{u\to v}f(v)\frac{1-\frac{p}{q}}{deg(v)}

\]

最后,\(i\) 点的答案为 \(f(i)\frac{p}{q}\)


CF24D Broken robot

\(f(i,j)\) 表示从 \((i,j)\) 开始走,走到第 \(n\) 行的期望步数。

\(f(n,i)=0\)

枚举 \((i,j)\) 可能走到哪里,设走到 \((x,y)\) 的概率为 \(p\),答案为


\[f(i,j)=1+\sum_{x,y}f(x,y)p

\]

直接高斯消元复杂度是 \(O(n^6)\)

但是由于不能往上走,因此可以一行一行地高斯消元,复杂度变为 \(O(n^4)\)

再仔细观察矩阵发现系数都在主对角线附近,因此可以做到 \(O(n^2)\)


UVA12177 First Knight

\(f(i,j)\) 表示从 \((i,j)\) 走到 \((n,m)\) 的期望步数。

\(dp(n,m)=0\)


\[f(i,j)=1+\sum_{x,y}f(x,y)p((x,y)\rightarrow(i,j))

\]

暴力高斯消元复杂度为 \(O(n^3m^3)\)

将坐标建立与编号的映射 \((i,j)\longrightarrow (n-i)m+m-j+1\)

可以考虑只保留上三角矩阵,即消掉下三角矩阵。

对于一个未知数 \(i\),只需要遍历 \((i,i)\)\((i+m,i+2m)\) 的矩阵就行了,时间复杂度优化为 \(O(nm^3)\)


P7016 [CERC2013]Captain Obvious and the Rabbit-Man

构造多项式


\[\begin{aligned}

A(x)

&=(x-F_1)(x-F_2)\cdots(x-F_k)\\

&= x^k+b_1x^{k-1}+b_2x^{k-2}+\cdots +b_k

\end{aligned}

\]


\[A(F_i)=F_i^k+b_1F_i^{k-1}+b_2F_i^{k-2}+\cdots +b_k=0

\]

\(i=1\to k\) 求和


\[\sum_{i=1}^kA(F_i)=\sum_{i=1}^kF_i^k+b_1\sum_{i=1}^kF_i^{k-1}+b_2\sum_{i=1}^{k}F_i^{k-2}+\cdots+b_{k-1}\sum_{i=1}^kF_i+b_kk=0

\]

发现这样似乎没法用到题目给出的 \(p_i\),于是可以考虑先对 \(A(F_i)\)\(a_i\) 再求和


\[\sum_{i=1}^kA(F_i)a_i=\sum_{i=1}^kF_i^ka_i+b_1\sum_{i=1}^kF_i^{k-1}a_i+b_2\sum_{i=1}^{k}F_i^{k-2}a_i+\cdots+b_{k-1}\sum_{i=1}^kF_ia_i+b_k\sum_{i=1}^ka_i=0

\]


\[\sum_{i=1}^kA(F_i)a_i=p_k+b_1p_{k-1}+b_2p_{k-2}+\cdots+b_{k-1}p_1+b_k\sum_{i=1}^ka_i=0

\]

推到这里还是推不动,再在前面求和之前乘个 \(F_i\)


\[\sum_{i=1}^kA(F_i)a_iF_i=p_{k+1}+b_1p_k+b_2p_{k-1}+\cdots+b_kp_1=0

\]

于是


\[p_{k+1}=-\sum_{i=1}^kb_ip_{k-i+1}

\]

\(O(k^2)\) 解出 \(b_i\),即可计算答案。


CF963E Circles of Waiting

\(f(x,y)\) 表示从 \((x,y)\) 出发,走到距离大于 \(R\) 的点的期望步数。

如果 \(x^2+y^2>R^2\)\(f(x,y)=0\)


\[f(x,y)=1+f(x-1,y)p_1+f(x,y-1)p_2+f(x+1,y)p_3+f(x,y+1)p_4

\]

暴力高斯消元时间复杂度为 \(O(n^6)\)

考虑使用主元法。

将纵坐标从上到下,横坐标从左到右依次编号,取每个纵坐标最左边的横坐标为主元。


\[f(x+1,y)=\frac{f(x,y)-f(x-1,y)p_1-f(x,y-1)p_2-f(x,y+1)p_4-1}{p_3}

\]

可以达到 \(O(n^3)\)


P3211 [HNOI2011]XOR和路径

按位处理。

\(f(u)\) 表示从 \(u\) 出发到 \(n\),这一位的异或和为 \(1\) 的概率。


\[f(u)=\sum_{u\to v}\frac{[w=0]f(v)+[w=1](1-f(v))}{deg(u)}

\]

注意判断自环,自环的边只能连一次。


CF895C Square Subsets

完全平方数只与质因子的奇偶有关,小于等于 \(70\) 的质数只有 \(19\) 个,因此可以把每个数分解质因数后用二进制表示。

两个数想成等价于异或,原问题等价于异或和为 \(0\) 的真子集数。

假设线性基插入的元素个数为 \(cnt\),那么答案为 \(2^{n-cnt}-1\)(线性基的基底异或一定不为 \(0\))。


P4869 albus就是要第一个出场

对于一个已经确定的线性基,新加入一个能被基底表示的数,会使得所有能被表示的数统一乘 \(2\)

于是问题就转化为查询一个数在线性基中的排名。


P5607 [Ynoi2013] 无力回天 NOI2017

很明显是线段树 + 线性基。

但线性基无法下传标记,于是考虑差分。

\(a_{i-1}\oplus b_i=a_i\),每次只需要支持单点修改即可。

可以发现 \(a_{l\rightarrow r}\) 组成的线性基与,\(a_l\)\(b_{l+1\rightarrow r}\) 组成的线性基相同(考虑 \(a_i\) 的定义来证明)。

于是这道题可以在 \(O(n\log n\log^2 V)\) 解决。


CF845G Shortest Path Problem?

图中的环可以任意添加,于是可以把所有环加入线性基中。

其实 \(1\)\(n\) 的路径也可以任意选择,因为如果存在一条更优的路径,它会与原路径成环,一定会被加入线性基中。


CF1299D Around the World

发现边权值只达到 \(31\),爆搜发现线性基的种类只有 \(374\)

考虑先将 \(1\) 连出去边删掉,可以得到很多连通块,沿用 CF845G 的方法,把每个连通块的环加入线性基中,如果存在一个环的权值不能加入线性基中,那么这个连通块一定不能与 \(1\) 相连。

因为不存在长度大于 \(3\) 的简单环,因此 \(1\) 向这些连通块要么连一条边,要么连两条边。

\(dp(i,j)\) 表示前 \(i\) 的连通块中,线性基为 \(j\) 的方案数,分类转移即可。



推荐阅读
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • steps/train_mono.sh
    定义拓扑结构、参数初始化$gmm-init-mono--shared-phones$langphonessets.int--train-feats$featssubset-fe ... [详细]
author-avatar
刘华兰2011_423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有