给定两个巨大的方块矩阵A和B (行数高达 7000).请输出A x B 的运算结果,且时限只有 2s。
哈哈!对矩阵乘法的演进历史有些涉猎的人,应该能感受到在 某CPC 上出现这样的题目有多不合理。
哈哈!对矩阵乘法的演进历史有些涉猎的人,应该能感受到在 某CPC 上出现这样的题目有多不合理。
现在,给定a,b,c,d的四个种子可以通过Xorshift随机数生成器生成输入矩阵。
这里是通过随机数生成器来产生矩阵的实现:
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();
}
}
} 我们会给你另一个数字p来做这件事。
这里是哈希函数的实现。
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;
} P.S. 不懂 C++语法的同学们就抱歉啦~

