題意:求兩個n*n的矩陣相乘的結果,得出的每個元素%3;
分析:2000ms然後n的範圍是800,我們自己估算的時間複雜度並不會超時,但是結果就是超時了。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #includeview code8 #include 9 #include 10 #include
11 #include 12 #include 13 #include 14
using
namespace
std;
15#define ll long long
16#define _cle(m, a) memset(m, a, sizeof(m))
17#define repu(i, a, b) for(int i = a; i < b; i++)
18#define repd(i, a, b) for(int i = b; i >= a; i--)
19#define sfi(n) scanf("%d", &n)
20#define pfi(n) printf("%d\n", n)
21#define maxn 100010
22const
int n = 810;23
intn;
24int
a[n][n], b[n][n], c[n][n];
25int
scan()
2632 res = ch - '0'
;33while( ( ch = getchar() ) >= '
0' && ch <= '9'
)34 res = res * 10 + ( ch - '0'
) ;35
return
res ;36}
3738
intmain()
3947 repu(i,0
,n)48 repu(j,0
,n)49
52 memset(c, 0, sizeof
(c));
53 repu(i,0
,n)5463}
64}65for(int i = 0; i < n; i++)
6673 puts(""
);74}75
}76return0;
77 }
我當時找稀疏矩陣的時候就找到的是直接矩陣相乘的模板,但是還是超時了,後來才知道我的輸入掛需要重新更新了。
不過我還有一點疑惑就是為什麼同樣是三層迴圈(i,j,k),但是跑出來的時間不一樣的呢。。。。。。。
c[i][j] += a[i][k] * b[k][j];///會超時c[i][k] += a[i][j] * b[j][k];///不會超時
c[j][k] += a[j][i] * b[i][k];///不會超時
hdu4920(矩陣 乘法)
題意 矩陣乘法,在乘的過程中每個元素都取模3 在比賽時,我一直在想怎麼才能把o n n n 的時間複雜度給降下來,可是一直沒想到好的辦法,後來看了題解後才知道原來時間複雜度還是o n n n 只是優化了一點而已 如下 include include include include include i...
HDU4920 矩陣乘法
嗯嗯 就算是水題吧。縮完行就15行 題意 兩個n n的矩陣相乘 n 800 結果對3取模 思路 先對3取模,所以兩個矩陣裡面會出現很多0,所以可以先列舉乙個矩陣,只有當該位置不是0的時候才和另乙個矩陣做乘法。取模的時候也有技巧,不要在計算的途中取模,應該讀入的時候取一次模,輸出的時候取一次模 計算量...
bzoj4920 薄餅切割
傳送門 首先要發現其實木棍覆蓋區域是圓環形狀的。於是我們要求出大圓半徑r和小圓半徑r 首先大圓半徑顯然是在兩個端點處取到的。然後,發現點在木棍上移動是與圓心距離的函式是單峰函式。於是我們可以三分求最小值。然後問題九轉化成了圓形面積和長方形面積的交。分類要論以下就可以求出來了。include incl...