基于概率判断矩阵A*B是否等于C

news/2024/11/15 14:02:47/文章来源:https://www.cnblogs.com/zhengchenxi/p/18353620

如果是\(O(n^3)\)的暴力肯定会T,那么我们想有没有一种方法可以不用直接让 \(A*B\) 而是间接得到,

我们可以随一个n*1的矩阵 D 出来,矩阵乘法是满足交换律的:
\(A*B=C\)
\(A*B*D=C*D\)
\(A*(B*D)=C*D\)
这样我们就可以在\(O(n^2)\)的复杂度完成判断,
根据不知道是啥的秩_零化度定理,这样出错的概率极低,只有\(998244353^{-1}\)

点击查看代码
#include<bits/stdc++.h>
using namespace std;#define int long long
const int N=3e3+107;
const int mod=998244353;
int a[N][N],b[N][N],c[N][N];
int d[N],e[N],f[N];int read()
{int f=1,s=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}return f*s;
}
signed main()
{freopen("in.in","r",stdin);freopen("out.out","w",stdout);mt19937_64 gen(time(0));int T=read();while(T--){int n=read();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=read();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) b[i][j]=read();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) c[i][j]=read();for(int i=1;i<=n;i++){f[i]=gen()%(mod-1)+1;d[i]=e[i]=0;}for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++){d[i]=(d[i]+b[i][j]*f[j]%mod)%mod;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){e[i]=(e[i]+c[i][j]*f[j]%mod)%mod;}}for(int i=1;i<=n;i++) f[i]=d[i],d[i]=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i]=(d[i]+a[i][j]*f[j]%mod)%mod;}}bool flag=0;for(int i=1;i<=n;i++) if(d[i]%mod!=e[i]%mod) flag=1;if(flag) printf("No\n");else printf("Yes\n");}
}

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

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

相关文章

pyCharm 设置 签名,时间

#!python3.8 # -*- coding: utf-8 -*- # --- # @File: ${NAME}.py # @Author: ${USER} # @Time: ${MONTH_NAME_SHORT} ${DAY}, ${YEAR} # ---

Pycharm 设置 flask 监听端口

新建 flask 项目之后,Pycharm 会默认生成1个 flask server,在默认端口 5000运行 如果要设置自己的 flask 端口,就再编写 run.py 文件,然后运行它from flask import Flaskapp = Flask(__name__)@app.route(/) def hello_world(): # put applications code herereturn Hello …

2024-8-11 算法学习

P4301 [CQOI2013] 新Nim游戏 题意:给定一串数列,拿走数列中的一些数,使得剩下来的一些数的所有非空子集的异或和都不为0,且拿走的数的和要最小 类似于线性代数,如果一些元素能够异或和为0,那么说明这些元素“线性相关”,所以只要留下无关的数,那么就满足题意。 采取线性…

vue组件的完整原型链

转自:https://blog.csdn.net/weixin_65692463/article/details/128173817 vue组件的完整原型链构造函数原型 prototype构造函数通过原型分配的函数是所有对象所共享的JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。注意这个 prototype 就是一个对…

Ethereum学习笔记 ---- 通过 Event 学习《合约ABI规范》

以太坊合约ABI规范见 官方文档-合约ABI规范 这里通过实验来印证 ABI 编码在 Event log 中的实现。 本地启动 ganache 首先在本地启动 ganache 作为 evm 链单节点,稍后与以太坊的交互都是通过与本地的 ganache 节点交互来实现的。 Ganache官网 将 ganache 节点的端口设置为以太…

pycharm专业版的安装和破解教程

1. 下载资源后解压,以管理员身份运行pycharm-professional-2024.1.exe 解压码:520000 下载链接:https://pan.xunlei.com/s/VO41LIAJ5geCjsQuhaUTNRM8A1?pwd=tjwt# 2. 安装程序内:下一步 -> 设置安装目录(软件安装不推荐放c盘,可以改成别的盘),下一步 -> 根据需要…

【转载】Behinder4.1(冰蝎)重写传输协议

0x01 编写流程首先新建你自己的传输协议名称然后使用java编写本地的加密函数再编写对应的解密函数,就可以保存然后再用对应语言编写远程加解密函数然后通过Wireshark抓包可以发现流量数据已经成功就行了加密 0x02 测试源码 1、本地加解密 // 加密函数 private byte[] Encrypt(…

pwntools缓冲区溢出与栈没对齐

我是ubuntu22.04,遇到了极其诡异的事情:可真是气死我了,got EOF是在逗我?怎么就EOF了?怎么就到end of file了? 下面请欣赏大佬的讲解:以下贴上gpt更详细的解答,我这次深刻的记住了栈要16字节对齐(我以前一直以为这只是为了提高效率的,可选可不选,无非慢一点) 当栈没…

Elasticsearch 磁盘空间异常:一次成功的故障排除案例分享

故障现象 近日有客户找到我们,说有个 ES 集群节点,磁盘利用率达到了 82% ,而其节点才 63% ,想处理下这个节点,降低节点的磁盘利用率。 起初以为是没有打开自动平衡导致的,经查询,数据还是比较平衡的。利用率较高的是 76 节点,如果 76 节点的分片比其他节点多,好像还比…

039.Vue3入门,异步加载组件,初始时不全部加载,使用时才加载

1.App.vue代码如下:<template><button @click="change">切换组件</button><p></p><keep-alive><component :is="tabComponent"></component></keep-alive> </template><script> impor…

P1270 “访问”美术馆

题意注意:要预留一秒的时间!!!不然你就 80 pts 分了。 小偷要回到大门。思路 定义 \(f_{i, j}\) 表示到在 \(i\) 的子树内拿 \(j\) 幅画。 那么我们可以枚举 \(f_{to, k}\) 表示在儿子结点拿 \(k\),那么总共为 \(f_{u, j + k} = min(f_{u, j + k}, f_{u, j} + f_{to, k} +…

matlab求解非线性规划

目录前言一、非线性规划的标准型二、fmincon函数1.目标函数--function f = fun(x)2.非线性约束函数--[c,ceq] = nonlfun(x)3.设置求解方法--option三、matlab求解非线性规划的实例与可能遇到的问题1.初值问题2.算法问题(1)内点法求解(2)SQP算法求解(3)active set算法求解…