{"raw_statement":[{"iden":"statement","content":"给定两个大小为均为 $512 \\times 512$，每个元素均为整数，值域为 $ [0, 1024) $ 矩阵 $A, B$，定义为\n\n$$ \\begin{aligned}\n\tA\\left[i, j\\right] &= \\left(\\left(i \\mathbin{\\mathrm{or}} j\\right) + j\\right) \\mathbin{\\mathrm{xor}} \\mathrm{seed}_A \\\\\n    B\\left[i, j \\right] &= \\left( \\left(i \\mathbin{\\mathrm{and}} j \\right) + i \\right) \\mathbin{\\mathrm{xor}} \\mathrm{seed}_B\n\\end{aligned} $$\n\n其中 $i, j \\in [0, 512)$。\n\n请计算 $C = A \\times B$。 "},{"iden":"input","content":"输入为两个整数 $\\mathrm{seed}_A, \\mathrm{seed}_B$（$0 \\leq \\mathrm{seed}_A, \\mathrm{seed}_B < 1024$）。\n\n你可以使用以下代码模板，完成其中的 `multiply` 即可。\n\n你可以修改 $N$（即数组长度），但是不能修改 $n$（矩阵大小，恒为 $512$）。\n\n```cpp\n#include <bits/stdc++.h>\nconst int n = 512, N = n;\nvoid multiply (int c[N][N], int a[N][N], int b[N][N]) {\n\t// c = a * b\n}\nint c[N][N], a[N][N], b[N][N];\nint main() {\n\tint seedA, seedB;\n\tscanf(\"%d%d\", &seedA, &seedB);\n    for (int i = 0; i < n; i++)\n        for (int j = 0; j < n; j++)\n            a[i][j] = ((i | j) + j) ^ seedA;\n    for (int i = 0; i < n; i++)\n        for (int j = 0; j < n; j++)\n            b[i][j] = ((i & j) + i) ^ seedB;\n    multiply(c, a, b);\n    for (int i = 0; i < n; i++) {\n        int sum = 0;\n        for (int j = 0; j < n; j++) sum ^= c[i][j];\n        printf(\"%d\\n\", sum);\n    }\n}\n```"},{"iden":"output","content":"输出 $512$ 行，分别是 $C$ 每行的异或和。\n\n输入中的代码会帮助你完成输出。"}],"translated_statement":null,"sample_group":[["0 0","8126464\n14942208\n33554432\n...(省略506行)\n29097984\n146800640\n148570112"]],"show_order":[],"formal_statement":null,"simple_statement":null,"has_page_source":false}