poj 3318(随机。。。。有正常的方法)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <time.h> 6 using namespace std; 7 8 const int maxn=5e2+10; 9 long A[maxn][maxn],B[maxn][maxn],C[maxn][maxn]; 10 11 int n; 12 13 int main() 14 { 15 srand((unsigned)time(NULL)); 16 while(scanf("%d",&n) != EOF) 17 { 18 for(int i=1;i<=n;i++) 19 for(int j=1;j<=n;j++) 20 scanf("%d",&A[i][j]); 21 for(int i=1;i<=n;i++) 22 for(int j=1;j<=n;j++) 23 scanf("%d",&B[i][j]); 24 for(int i=1;i<=n;i++) 25 for(int j=1;j<=n;j++) 26 scanf("%d",&C[i][j]); 27 bool ans=1; 28 for(int x=0;x<60000;x++) 29 { 30 int i=rand()%n+1; 31 int j=rand()%n+1; 32 long sum=0; 33 for(int k=1;k<=n;k++) 34 sum+=(A[i][k]*B[k][j]); 35 if(C[i][j] != sum) 36 { 37 ans=0; 38 break; 39 } 40 } 41 if(ans) puts("YES"); 42 else puts("NO"); 43 } 44 return 0; 45 }