codeforces 245 D. Restoring Table(位运算+思维)

题目链接:http://codeforces.com/contest/245/problem/D

题意:给出一个矩阵b,b[i][j]=a[i]&a[j],b[i][i]=-1。然后求a[i]。

题解:要知道&运算后只有一位同时为1时结果才是1所以可以得

a[i]可以是b[i][1~n]所有状态的和。

#include <iostream>
#include <cstring>
using namespace std;
int b[110][110] , a[110];
int main() {
    int n;
    cin >> n;
    for(int i = 1 ; i <= n ; i++) {
        for(int j = 1 ; j <= n ; j++) {
            cin >> b[i][j];
        }
    }
    memset(a , 0 , sizeof(a));
    for(int i = 1 ; i <= n ; i++) {
        for(int j = i + 1 ; j <= n ; j++) {
            a[i] |= b[i][j];
        }
        for(int j = 1 ; j < i ; j++) {
            a[i] |= b[j][i];
        }
    }
    for(int i = 1 ; i <= n ; i++) {
        cout << a[i] << ' ';
    }
    cout << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/TnT2333333/p/6764136.html