首页 > 其他分享 >题解 POJ3318【Matrix Multiplication】

题解 POJ3318【Matrix Multiplication】

时间:2023-07-20 18:46:39浏览次数:51  
标签:Matrix int 题解 times Multiplication include matrix

posted on 2022-10-21 19:56:08 | under 题解 | source

problem

判断三个 \(n\times n\) 的矩阵是否满足 \(A\times B=C\),\(n\leq 500\)。

solution

随机一个向量 \(v\)。若 \(a\times b=c\),则有 \(v\times a\times b=v\times c\)(不充分)。显然相乘复杂度仅为 \(O(n^2)\)。类似于一种哈希,正确概率很高。

code

#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
template<int N,int M> struct matrix{
    LL a[N+1][M+1];
    matrix(bool k=0){memset(a,0,sizeof a);for(int i=1;i<=N;i++) a[i][i]=k;}
    LL* operator[](int i){return a[i];}
};
template<int N,int M> bool operator==(matrix<N,M> a,matrix<N,M> b){
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
            if(a[i][j]!=b[i][j]) return 0;
    return 1;
}
template<int N,int M,int R> matrix<N,R> operator*(matrix<N,M> a,matrix<M,R> b){
    matrix<N,R> res;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=R;j++)
            for(int k=1;k<=M;k++)
                res[i][j]=res[i][j]+a[i][k]*b[k][j];
    return res;
}
int n;
matrix<510,510> a,b,c;
matrix<1,510> v[20];
int mian(){
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&a[i][j]);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&b[i][j]);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&c[i][j]);
	for(int j=1;j<=5;j++){
		if(!(v[j]*a*b==v[j]*c)) return puts("NO"),0;
	}
	puts("YES");
	return 0;
}
void reset(){
	memset(a.a,0,sizeof a.a);
	memset(b.a,0,sizeof b.a);
	memset(c.a,0,sizeof c.a);
}
int main(){
	srand(time(0));
	for(int i=1;i<=5;i++){
		for(int j=1;j<=500;j++) v[i][1][j]=rand()<<15|rand();
	}
	for(;~scanf("%d",&n);reset(),mian());
	return 0;
}

标签:Matrix,int,题解,times,Multiplication,include,matrix
From: https://www.cnblogs.com/caijianhong/p/solution-POJ3318.html

相关文章

  • 题解 P4955 【[USACO14JAN]Cross Country Skiing S】
    postedon2021-02-2710:04:32|under题解|source这道题其实没有绿这么难,只需要二分+搜索就行了。读入。注意尽量不要用scanf读入bool,这好像是UB,可以用一个变量\(x\)存输入的数,然后直接类型转换。二分。套模版就行了,等一下我们再写\(\operatorname{check}()\)函......
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解
    发现挨位考虑填哪个不太现实,考虑值域。令\(dp_{i,j,st}\)表示考虑到\(i\),此时序列长度为\(j\),\(i-m\)到\(i-1\)填空状态为\(st\)的方案数,考虑选/不选数即可:\(dp_{i,j,st}\times(\text{popcount}(st)+1)\todp_{i+1,j+1,(2st+1)\&2^m},dp_{i+1,j,(2st)\&2^m}\)乘上那......
  • 题解 //「BZOJ2406」矩阵
    赛时公告现在呢?:现在有弹窗了吗「2023-07-1916:45:07」此时无声胜有声。F.「BZOJ2406」矩阵http://222.180.160.110:1024/contest/3825/problem/7这是头一次见识到把矩阵和网络流结合在一起的题目。不过这种处理方式也是我们在学习二分图时的常客了:把行和列连边表示某一元......
  • 【题解】Luogu[P3360] 偷天换日
    solution开题显然是个树形dp,只不过在树形dp上又增加了背包问题。我们不妨将每个走廊看成一个点,把交叉口看成边(当然也可以把交叉口看成点,不过写起来麻烦一些),于是就转化为了一棵二叉树。我们设\(f_{i,j}\)表示以\(i\)为根的子树内,花费了不超过\(j\)时间,能拿到的最大价值......
  • Frog 3 题解
    Frog3题目大意题意都这么明确了还要这个干什么。存在\(n\)个点,每个点有一个属性\(h_i\),\(h_i\)单增,从点\(i\)移动到点\(j(j>i)\)的代价是\((h_i-h_j)^2+C\),其中\(C\)是给定的常数,求从点\(1\)移动到点\(n\)的最小代价。思路分析斜率优化DP板题。设\(f_i\)......
  • SP10582 题解
    题目链接题意简述给定一个有\(n\)个数的数组,求从第一个数字开始,向后每\(k\)个数字的最大值。题目分析看到没有人用ST表做那我就来发一个吧。这道题可以用ST表做。它可以在经过\(O(N\logN)\)的预处理后,以\(O(1)\)的时间在线回答下标在\(l\)到\(r\)之间的数......
  • 【题解】Luogu[P2607] [ZJOI2008] 骑士
    题目说给定\(n\)个点\(n\)个关系,也就是\(n\)条边,显然是基环树,又因为没有规定一定连通,于是我们可以将题目简化为给定一个基环树森林,点有点权,相邻的两个点不能同时选,问最大点权和。part1我们先考虑如果没有环,只是树,该怎么做。这一部分很简单,令\(f_{i,0/1}\)表示以\(i\)......
  • 基站建设 题解
    基站建设题目大意在平面上存在\(n\)个点,第\(i\)个点的坐标为\((x_i,0)\),具有一个发射半径\(r_i\)和一个费用\(v_i\)。连接具有方向性,当且仅当\(j<i\)且点\(i\)的接收范围与点\(j\)的发射范围相切时点\(i\)才能连接到点\(j\)。第\(i\)个点的发射范围是指一......
  • [ARC104E] Random LIS 题解
    [ARC104E]RandomLIS题解Link吐了,一下午就写了这一个题……主要是题解都说的很草率。然后上课的时候貌似讲的方法不是很能做(也许是我太菜了),总之我得写篇题解整理整理。首先\(n\)很小,可以直接爆搜所有相对大小,即我们去搜索\(1\)到\(n\)的排名,排名可以一样(即\(a_i\)相......
  • RTSP流媒体服务器LntonNVR(源码版)云服务平台下载录像后无法拖动时间轴的问题解决方案
    LntonNVR安防视频云服务平台是基于RTSP/Onvif协议的视频接入、处理及分发平台,可以分发出RTSP、RTMP、WS-FLV、HTTP-FLV、HLS、WebRTC等格式的视频流,可实现在全终端(PC、手机、平板、电子大屏/电视墙等)播放监控视频。有用户反馈,在使用LntonNVR下载录像时,下载后的录像时间无法拖动时间......