Newcoder 110 D.矩陣(水~)
阿新 • • 發佈:2018-11-09
Description
給定兩個巨大的方塊矩陣 和 (行數高達 ).請輸出 的運算結果,且時限只有 。
哈哈!對矩陣乘法的演進歷史有些涉獵的人,應該能感受到在某 上出現這樣的題目有多不合理。
為了使這個問題成為可能(?),我們將減小 大小。
現在,給定 的四個種子可以通過 隨機數生成器生成輸入矩陣。
這裡是通過隨機數生成器來產生矩陣的實現:
uint32_t x, y, z, w;
uint32_t xorshift() {
uint32_t t = x;
t ^= t << 11;
t ^= t >> 8;
x = y; y = z; z = w;
w ^= w >> 19;
w ^= t;
return w & ((1 << 24) - 1);
}
void getInputMatrix(
int n, uint32_t matrix[][7000],
uint32_t a, uint32_t b, uint32_t c, uint32_t d
) {
x = a; y = b; z = c; w = d;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = xorshift();
}
}
}
另外,您應該將輸出矩陣傳遞給雜湊函式 。
我們會給你另一個數字 來做這件事。
這裡是雜湊函式的實現。
const int MOD = 1000000007;
int hash(int n, long long matrix[][7000], int p) {
long long v = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
v *= p;
v += matrix[i][j];
v %= MOD;
}
}
return v;
}
Input
輸入只包含一行,包含十個整數 。
矩陣 是通過 構建 的。
矩陣 是通過 構建 的。
是雜湊函式。
Output
令 , 是 矩陣乘以 的結果
請輸出一個整數,它是$hash(n,C,p) $的結果
Sample Input
1 2 3 4 5 6 7 8 9 10
Sample Output
50873769
Solution