Codeforce 1016D Vasya And The Matrix

要求构造n行m列的矩阵,使得每一行的数值异或结果分别为\(a_i\),每一列的数值异或结果分别为\(b_i\)

解:第一行为\(b_1,b_2...b_m\)第一列为\(a_1,a_2,...a_n\)最后将左上角修改为\(a_1\oplus b_2 \oplus b_3 ... \oplus b_m\)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;

int n, m;

const int maxn = 1e2 + 10;
int A[maxn], B[maxn];
int ans[maxn][maxn];
int r1, r2;

int main() {
    scanf("%d%d", &n, &m);
    r1 = 0; r2 = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &A[i]);
        r1 ^= A[i];
    }
    for (int i = 0; i < m; i++) {
        scanf("%d", &B[i]);
        r2 ^= B[i];
    }
    if (r1 != r2) {
        puts("NO");
    } else {
        int t = 0;
        for (int i = 1; i < m; i++) ans[0][i] = B[i], t ^= B[i];
        for (int i = 1; i < n; i++) ans[i][0] = A[i];
        ans[0][0] = (t ^ A[0]);
        puts("YES");
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                printf("%d%c", ans[i][j], j == m - 1 ? '\n' : ' ');
            }
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xFANx/p/9498655.html
今日推荐