luogu#B3615. 测测你的矩阵乘法
测测你的矩阵乘法
题目描述
给定两个大小为均为 ,每个元素均为整数,值域为 矩阵 ,定义为
$$ \begin{aligned} A\left[i, j\right] &= \left(\left(i \mathbin{\mathrm{or}} j\right) + j\right) \mathbin{\mathrm{xor}} \mathrm{seed}_A \\ B\left[i, j \right] &= \left( \left(i \mathbin{\mathrm{and}} j \right) + i \right) \mathbin{\mathrm{xor}} \mathrm{seed}_B \end{aligned} $$其中 。
请计算 。
输入格式
输入为两个整数 ()。
你可以使用以下代码模板,完成其中的 multiply
即可。
你可以修改 (即数组长度),但是不能修改 (矩阵大小,恒为 )。
#include <bits/stdc++.h>
const int n = 512, N = n;
void multiply (int c[N][N], int a[N][N], int b[N][N]) {
// c = a * b
}
int c[N][N], a[N][N], b[N][N];
int main() {
int seedA, seedB;
scanf("%d%d", &seedA, &seedB);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
a[i][j] = ((i | j) + j) ^ seedA;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
b[i][j] = ((i & j) + i) ^ seedB;
multiply(c, a, b);
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < n; j++) sum ^= c[i][j];
printf("%d\n", sum);
}
}
输出格式
输出 行,分别是 每行的异或和。
输入中的代码会帮助你完成输出。
0 0
8126464
14942208
33554432
...(省略506行)
29097984
146800640
148570112