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也是看人品的)
思路:题目明示直接判断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; }
相关文章推荐
- 多巴胺对于情绪的影响 理智与感性
- oracle rac 10201升级到10205
- 安装mysql
- 分布式缓存GemFire架构介绍
- iOS的AssetsLibrary框架解读与应用
- 我的JS历史知识
- SQlite的数据库查询
- 【面试题】面试题集四
- 操作系统内核Hack:(一)实验环境搭建
- 彩票系统 35选7
- 基本类型和引用类的区别
- 操作系统内核Hack:(一)实验环境搭建
- 【面试题】面试题集四
- Hadoop权威指南第4版第7章Anatomy of a MapReduce Job Run
- 扩展系统功能——装饰模式(四):透明与半透明装饰模式,装饰模式注意事项,装饰模式总结
- 2015.9.13
- 给我半个小时记录一下最近
- 解决Eclipse导入Android工程出错
- LeetCode_pascals-triangle
- 使用apktool + idea 调试smali