神奇的矩阵(bzoj 2396)
Description
给出三个行数和列数均为N的矩阵A、B、C,判断A*B=C是否成立。
Input
题目可能包含若干组数据。
对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为A、B、C三个矩阵。
Output
对于每组数据,若A*B=C成立,则输出Yes,否则No。每个答案占一行。
Sample Input
2
2
100
Sample Output
HINT
对于90%的数据,N不超过100;
对于100%的数据,N不超过1000,矩阵中的数字大于等于0小于1000,数据组数不超过5组。
- /*
- 直接判断是O(n^3)的,显然不行,我们发现,如果A*B=C,那么(A*B)*R=C*R。
- 可以利用以上结论,设R为一个1*n的随机矩阵,如果(A*B)*R与C*R相等,那么A*B与C大几率相等。
- */
- #include<cstdio>
- #include<iostream>
- #include<cstdlib>
- #define N 1010
- using namespace std;
- int a[N][N],b[N][N],c[N][N],rnd[N],ans1[N],ans2[N],n;
- void mul(int a[N],int b[N][N],int c[N]){
- int tmp[N]={};
- for(int j=;j<=n;j++)
- for(int i=;i<=n;i++)
- tmp[j]+=a[i]*b[i][j];
- for(int i=;i<=n;i++) c[i]=tmp[i];
- }
- int main(){
- freopen("jh.in","r",stdin);
- for(int i=;i<=;i++) rnd[i]=rand();
- while(scanf("%d",&n)!=EOF){
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- scanf("%d",&a[i][j]);
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- scanf("%d",&b[i][j]);
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- scanf("%d",&c[i][j]);
- mul(rnd,a,ans1);
- mul(ans1,b,ans1);
- mul(rnd,c,ans2);
- int flag=;
- for(int i=;i<=n;i++)
- if(ans1[i]!=ans2[i]) {flag=;break;}
- if(!flag) printf("Yes\n");
- else printf("No\n");
- }
- return ;
- }
神奇的矩阵(bzoj 2396)的更多相关文章
- bzoj2396: 神奇的矩阵
与51nod1140一样.不过这题是多组数据的...坑.... #include<cstdio> #include<cstring> #include<cctype> ...
- [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)
题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...
- 神奇的矩阵 NOI模拟题
神奇的矩阵 题目大意 有一个矩阵\(A\),第一行是给出的,接下来第\(x\)行,第\(y\)个元素的值为数字\(A_{x-1,y}\)在\(\{A_{x-1,1},A_{x-1,2},A_{x-1, ...
- [XJOI NOI2015模拟题13] A 神奇的矩阵 【分块】
题目链接:XJOI NOI2015-13 A 题目分析 首先,题目定义的这种矩阵有一个神奇的性质,第 4 行与第 2 行相同,于是第 5 行也就与第 3 行相同,后面的也是一样. 因此矩阵可以看做只有 ...
- 1048: [HAOI2007]分割矩阵 - BZOJ
Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...
- D.Starry的神奇魔法(矩阵快速幂)
/*D: Starry的神奇魔法 Time Limit: 1 s Memory Limit: 128 MB Submit My Status Problem Description ...
- bzoj2396: 神奇的矩阵(矩阵乘法+随机化)
这题n三方显然会GG... 运用矩阵乘法的性质A*B*R=A*(B*R)=C*R,于是随机化出一个一列的R,就可以把复杂度降低成n方...大概率是不会错的 #include<iostream&g ...
- 【bzoj2396】神奇的矩阵 随机化
题目描述 给出三个行数和列数均为N的矩阵A.B.C,判断A*B=C是否成立. 输入 题目可能包含若干组数据.对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为A.B.C三个矩阵. 输出 ...
- BZOJ2396 神奇的矩阵 【随机化 + 矩乘】
题目链接 BZOJ2396 题解 一种快速判断两个矩阵是否相等的方法: 对于两个\(n * n\)矩阵,两边同时乘一个\(n * 1\)的随机矩阵,如果结果相等,那么有很大概率两个矩阵相等 如果左边是 ...
随机推荐
- 第三篇:彻底解决ssh.invoke_shell() 返回的中文问题
接上一篇,前两篇解决中文的问题主要是在字符集上做的手脚,即将中文转成英文,但是有一种情况我们都来不及做转换,即登录时服务器直接返回了中文内容: 此时程序报了如下错误,其实还是字符集问题: 为此:我们可 ...
- webpack+thymeleaf实现数据直出
webpack动态插入thymeleaf模板,MVC将要使用数据传递到模板中渲染,得到的html就已经带有要初始显示的数据了github:https://github.com/947133297/we ...
- SQL Server字符串聚合拼接办法
数据范例如下: 要得到的结果目标,获取type相同的所有names拼接在一起的字符串: SqlServer并没有一个直接拼接字符串的函数,下面所提到的方法,只是日常的开发中自己个人用到的一些思路,仅供 ...
- 无线Web开发
http://am-team.github.io/amg/dev-exp-doc.html
- yii2 基本的增删改查
一:添加方法 1.1 使用成员属性的方式 save $user_name = $_POST['user_name']; $password = $_POST['password']; //实例化 $u ...
- Oracle 数据库密码过期问题
(1)在CMD命令窗口中输入: sqlplus 用户名/密码@数据库本地服务名 as sysdba;(如:sqlplus scott/1234@oracle1 as sysdba; ...
- Python中关于集合的介绍及用法
一.集合的含义及创建方法 集合(set)是一种无序的并且里面存放不同元素的序列. 集合可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因 ...
- HDU:4417-Super Mario(离线线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- 华东交通大学2018年ACM“双基”程序设计竞赛 D
摸鱼之王MIKU酱想去埃及玩,需要一个人陪同.小新和小磊都想陪MIKU酱一起去,但名额只有一个.所以小磊和小新决定用一个小游戏来决定谁和MIKU酱出去玩. 游戏的道具是21张塔罗牌,塔罗牌分 ...
- [BZOJ3625][CF438E]小朋友和二叉树
题面 Description 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树. 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots,c_n\).如果一棵带点权的有根二叉树满足其 ...