POJ 3318:Matrix Multiplication(随机算法)
http://poj.org/problem?id=3318
题意:问A和B两个矩阵相乘能否等于C。
思路:题目明确说出(n^3)的算法不能过,但是通过各种常数优化还是能过的。
这里的随机算法指的是随机枚举矩阵C的一个位置,然后通过A*B计算是否能够得到矩阵C相应位置的数,如果不等,就直接退出了,如果跑过一定的数量后能够相等,那么就可以判断这个矩阵C等于A*B的。第一次见这样的题目。。。有点新奇。
暴力算法:
#include <cstdio>
using namespace std;
int a[][], b[][], c[][]; int read() {
int num = , f = ;
char c;
while((c = getchar()) == ' ' || c == '\n') ;
if(c == '-') f = ;
else num = c - '';
while((c = getchar()) >= '' && c <= '') num = num * + c - '';
if(f) return -num;
else return num;
} void solve(int n) {
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
int num = ;
for(int k = ; k <= n; k++)
num += a[i][k] * b[k][j];
if(num != c[i][j]) { puts("NO"); return ; }
}
}
puts("YES");
} int main() {
int n;
while(~scanf("%d", &n)) {
for(int i = ; i <= n; i++) for(int j = ; j <= n; j++) a[i][j] = read();
for(int i = ; i <= n; i++) for(int j = ; j <= n; j++) b[i][j] = read();
for(int i = ; i <= n; i++) for(int j = ; j <= n; j++) c[i][j] = read();
solve(n);
}
return ;
}
随机算法(试了好多次才对):
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
int a[][], b[][], c[][]; int main() {
srand((unsigned)time(NULL));
int n;
while(~scanf("%d", &n)) {
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]);
bool f = ;
for(int t = ; t < ; t++) {
int row = rand() % n + ;
int col = rand() % n + ;
int num = ;
for(int i = ; i <= n; i++)
num = num + a[row][i] * b[i][col];
if(num != c[row][col]) { f = ; break; }
}
if(!f) puts("YES");
else puts("NO");
}
return ;
}
POJ 3318:Matrix Multiplication(随机算法)的更多相关文章
- POJ 3318 Matrix Multiplication(随机算法)
题目链接 随机算法使劲水...srand((unsigned)time(0))比srand(NULL)靠谱很多,可能是更加随机. #include <cstdio> #include &l ...
- poj 3318 Matrix Multiplication 随机化算法
方法1:暴力法 矩阵乘法+优化可以卡时间过的. 方法2:随机化 随机构造向量x[1..n],则有xAB=xC;这样可以将小运算至O(n^2). 代码如下: #include<iostream&g ...
- 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication
Matrix Multiplication Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17783 Accepted: ...
- Poj 3318 Matrix Multiplication( 矩阵压缩)
Matrix Multiplication Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18928 Accepted: ...
- PKU 3318 Matrix Multiplication(随机化算法||状态压缩)
题目大意:原题链接 给定三个n*n的矩阵A,B,C,验证A*B=C是否成立. 所有解法中因为只测试一组数据,因此没有使用memset清零 Hint中给的傻乎乎的TLE版本: #include<c ...
- poj 3318 Matrix Multiplication
http://poj.org/problem?id=3318 矩阵A*矩阵B是否等于矩阵C #include <cstdio> #include <cstring> #incl ...
- [poj 3318] Matrix Multiplication (随机化+矩阵)
Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...
- POJ 3318 Matrix Multiplication(矩阵乘法)
题目链接 题意 : 给你三个n维矩阵,让你判断A*B是否等于C. 思路 :优化将二维转化成一维的.随机生成一个一维向量d,使得A*(B*d)=C*d,多次生成多次测试即可使错误概率大大减小. #inc ...
- POJ 3318 - Matrix Multiplication 第一次用随机化解决问题...
随机化还是很厉害的...印象最深的是以前手写快排~~一般加个随机化会使耗时不受输入数据的..时间更加稳定 这个题是人品题了...开始交了好多遍都过不了..多交几次终于过了... Program: #i ...
- PKU 3318 Matrix Multiplication(神奇的输入)
#include<cstdio> using namespace std; ][]; ][],C[][]; int Read() { ; ; while((ch=getchar())==' ...
随机推荐
- Vertica变化Local时间到GMT时间
在Vertica的数据库的使用过程中碰到这么一种场景.程序从不同一时候区的集群中收集数据写入同一张表,然后我们须要把这些数据依照GMT时间来显示. 此时我们能够通过Vertica提供TIME ZONE ...
- SQL_DML简单的操作
***********************************************声明*************************************************** ...
- 《C++ Primer Plus》学习笔记11
<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...
- 经典c开源项目
1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...
- 在 DEBIAN 上安装 SQL SERVER
微软在开源 .NET Framework 之后,相继推出了跨平台的编辑器 Visual Studio Code,跨平台的 SQL Server 数据库 SQL Server vNext,Visual ...
- WPF 4 TextBox 笔刷特效
原文:WPF 4 TextBox 笔刷特效 TextBox 控件是我们开发过程中必不可少的组件,它可以使应用程序方便的与用户进行文字交互.在新WPF 4 中又为TextBox 添加了两种新笔 ...
- ntp时间同步,各种配置方法
1 Windows xp NTP服务器的配置(2003配置方式一样) 1) 首先需要关闭作为NTP服务器的windows系统自带的防火墙,否则将同步不成功. 2) 单击“开始”,单击“运行”,键入 r ...
- 图像滤镜艺术---(Lightleaks Filter)漏光滤镜
原文:图像滤镜艺术---(Lightleaks Filter)漏光滤镜 (Lightleaks Filter)漏光滤镜 漏光拍摄其实就是一种摄影手法,最初是因为强烈光照导致相片交卷的过分曝光,最终在成 ...
- Qt在Windows上的调试器CDB安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- 基于VUE实现的新闻后台管理系统-一
基于VUE实现的新闻后台管理系统 前段时间拿到一个关于新闻后台的API,测试数据库使用SQLite,Restful服务是用Go写的,只要运行特定环境下的脚本(run.*)就会启动一个服务,依次后台为接 ...