hdu--4920--原来一直写了速度慢的矩阵乘法
这题....tle到落泪啊
后来 discuss里面的一个人 提供了一个链接 一下子 明白了 自己以前怎么没有注意过呢?
然后 只要按照第二种写法 果然AC了... 虽然时间还是卡的很紧 但起码不是tle了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 const int size = 810; 6 int x[size][size]; 7 int y[size][size]; 8 int z[size][size]; 9 10 int main() 11 { 12 cin.sync_with_stdio(false); 13 int n , num; 14 while( cin >> n ) 15 { 16 memset( z , 0 , sizeof(z) ); 17 for( int i = 0 ; i<n ; i++ ) 18 { 19 for( int j = 0 ; j<n ; j++ ) 20 { 21 cin >> num; 22 x[i][j] = num % 3; 23 } 24 } 25 for( int i = 0 ; i<n ; i++ ) 26 { 27 for( int j = 0 ; j<n ; j++ ) 28 { 29 cin >> num; 30 y[i][j] = num % 3; 31 } 32 } 33 for( int i = 0 ; i<n ; i++ ) 34 { 35 for( int k = 0 ; k<n ; k++ ) 36 { 37 if( x[i][k] ) 38 { 39 for( int j = 0 ; j<n ; j++ ) 40 { 41 z[i][j] += x[i][k] * y[k][j]; 42 } 43 } 44 } 45 } 46 for( int i = 0 ; i<n ; i++ ) 47 { 48 cout << (z[i][0]%3); 49 for( int j = 1 ; j<n ; j++ ) 50 { 51 cout << " " << (z[i][j]%3) ; 52 } 53 cout << endl; 54 } 55 } 56 return 0; 57 }
这边 还有一个很重要的判断
if( x[i][k] )
有没有这句话 时间差了300多Ms 因为这样一下子剪枝了很多不用进入for循环了
today:
我遇到猫在潜水 却没遇到你
我遇到狗在攀岩 却没遇到你
我遇到夏天飘雪 却没遇到你
我遇到冬天打雷 却没遇到你
我遇到所有的不平凡
却一直遇不到平凡的你
just follow your heart