您的位置:首页 > 其它

poj 3318 随机(矩阵相乘判断)

2015-09-13 12:15 302 查看
题意:给定三个n*n矩阵(n<=500)A、B、C,问A*B是否等于C。

思路:题目明示直接判断n^3会超时。所以应该用随机,每次随机挑选一行和一列,求和之后判断和C数组对应的值是否相同。一开始随机次数设定为n一直wa,后来改成40000就能A了(因为是随机,所以是否AC也是看人品的)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <ctime>
using namespace std;
#define INF 0x3fffffff
#define clr(s,t) memset(s,t,sizeof(s))
#define N 505
int n;
int s

,t

,a

;
int main(){
int i,j,k,num;
long long sum;
scanf("%d",&n);
for(i = 1;i<=n;i++)
for(j = 1;j<=n;j++)
scanf("%d",&s[i][j]);
for(i = 1;i<=n;i++)
for(j = 1;j<=n;j++)
scanf("%d",&t[i][j]);
for(i = 1;i<=n;i++)
for(j = 1;j<=n;j++)
scanf("%d",&a[i][j]);
//num = n*log((double)n);
num=40000;
srand((unsigned int)time(0));
while(num--){
i = rand()%n+1;
j = rand()%n+1;
for(k = 1,sum=0;k<=n;k++){
sum += s[i][k]*t[k][j];
}
if(sum != a[i][j])
break;
}
if(num==-1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: