P8053题解

· · 题解

哇,这居然是我AC的第二道灰题
题目链接:传送门

预备知识:

按位与:符号为 \&,将两个数字的每一位二进制进行逻辑与操作,仅在两位全为 1 的时候为 1
按位或:符号为 \mid,将两个数字的每一位二进制进行逻辑或操作,仅在两位全为 0 的时候为 0

分析:

这里我们设 b_{i,j} 的第 i 位为 1 因为进行的是按位与操作,所以 a_i 上所有 b_{i,j} 上为 1 的数位都会得到 1
所以,我们对其进行反向操作,得出式子 a_i=b_{i,j}\mid a_i。简单一点,即 a_i \mid =b_{i,j}

CODE:

#include <iostream>
using namespace std;
int n,b[1001][1001],a[1000];//题面所述。
int main(void){cin>>n;//输入n
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>b[i][j],a[i]|=b[i][j];//输入b[i][j]并对a[i]进行操作
for(int i=0;i<n;i++) cout<<a[i]<<" ";}//输出

最后,点个赞再走吧~