啊这......总之就是先摸一摸以前的迎新赛,找找手感。
网址http://codeforces.com/gym/102426
A,忘了线性相关是啥,百度一波,然后根据以前的经验,大概高斯消元一波就行了吧。
先消成倒三角,然后找一找有没有全0向量。有全零就代表线性相关。
第一次交的时候莫名其妙的WA了...然后微调了几个地方莫名其妙就A了,太怪了。
1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 5 const int N = 15; 6 const double eps = 1e-10; 7 8 int n, m; 9 double a[N][N]; 10 11 inline double fabs(double x) { 12 return (x < 0) ? (-x) : x; 13 } 14 15 inline bool work() { 16 for(int i = 1; i < n; i++) { 17 for(int j = i; j <= n; j++) { 18 if(fabs(a[j][i]) > eps) { 19 // [j][i] != 0 20 std::swap(a[j], a[i]); 21 break; 22 } 23 } 24 if(fabs(a[i][i]) < eps) { 25 continue; 26 } 27 for(int j = i + 1; j <= n; j++) { 28 if(fabs(a[j][i]) < eps) { 29 continue; 30 } 31 double x = a[j][i] / a[i][i]; 32 for(int k = i; k <= m; k++) { 33 a[j][k] -= a[i][k] * x; 34 } 35 } 36 } 37 for(int i = 1; i <= n; i++) { 38 bool flag = false; 39 for(int j = 1; j <= m; j++) { 40 if(fabs(a[i][j]) > eps) { 41 flag = true; 42 break; 43 } 44 } 45 if(!flag) { 46 return true; 47 } 48 } 49 return false; 50 } 51 52 inline void solve() { 53 54 memset(a, 0, sizeof(a)); 55 scanf("%d%d", &n, &m); 56 for(int i = 1; i <= n; i++) { 57 for(int j = 1; j <= m; j++) { 58 int x; 59 scanf("%d", &x); 60 a[i][j] = x; 61 } 62 } 63 64 if(work()) { 65 printf("YES\n"); 66 } 67 else { 68 printf("NO\n"); 69 } 70 71 return; 72 } 73 74 int main() { 75 76 int T; 77 scanf("%d", &T); 78 while(T--) { 79 solve(); 80 } 81 82 return 0; 83 }