ZOJ Problem Set - 3656 bit magic
来源:互联网 发布:昂达平板安装ubuntu 编辑:程序博客网 时间:2024/06/05 16:50
The 2012 ACM-ICPC Asia Changchun Regional Contest-B
题目大意就是给出b数组和b数组的构造方法,问有没有存在这样的a能构造出b数组
题目涉及到了& | ^ 三个位运算,因此可以逐位来考虑。很容易从^运算想到 如果a[i-1] 知道,则a[i]可以被推出,因为i-1和i肯定是一奇一偶,所以a[i]=c[i-1][i]^a[i-1]。
因此可以枚举a[0]是0 还是1,推出a后判断是否合法。
貌似也可以用2-sat判定。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define bit 32#define N 505using namespace std;int a[N],c[N][N],b[N][N];int n;bool Judge(int value){ a[0]=value; for (int i=1;i<n;++i) { a[i]=c[i-1][i] ^ a[i-1]; } for (int i=0;i<n;++i) for (int j=0;j<n;++j) { if (i == j) value = 0; else if (i % 2 == 1 && j % 2 == 1) value = a[i] | a[j]; else if (i % 2 == 0 && j % 2 == 0) value = a[i] & a[j]; else value = a[i] ^ a[j]; if (value!=c[i][j]) return false; } return true;}int main(){ while (cin>>n){ bool ok=true; for (int i=0;i<n;++i) for (int j=0;j<n;++j) scanf("%d",&b[i][j]); if (n==1) ok=(b[0][0]==0); else for (int k=0;k<bit;++k){ if (ok==false) break; for (int i=0;i<n;++i) for (int j=0;j<n;++j) c[i][j]=b[i][j]&1,b[i][j]>>=1; if (!Judge(0) && !Judge(1))ok=false; } cout<<(ok?"YES":"NO")<<endl; } return 0;}
- ZOJ Problem Set - 3656 bit magic
- ZOJ 3656 Bit Magic
- zoj 3656 bit magic
- ZOJ Problem Set - 3662 Math Magic
- ZOJ Problem Set - 2835 Magic Square
- ZOJ Problem Set - 2417 Lowest Bit
- ZOJ 3656 Bit Magic (2-Sat问题)
- ZOJ 3656 Bit Magic(2-sat)
- ZOJ 3656 Bit Magic (2-SAT判断)
- ACM->2-sat ZOJ 3656 Bit Magic
- hdu4421 ZOJ 3656——Bit Magic
- ZOJ 3656 Bit Magic 2-SAT
- ZOJ 3656 Bit Magic (2-SAT)
- zoj 3656 Bit Magic【2-sat】【2012 长春现场赛】
- ZOJ 3656 Bit Magic(并查集)
- ZOJ 3656 - Bit Magic 拆分成多个2-sat来判断...
- ZOJ 3656 Bit Magic (2-sat 可行性判定)
- ZOJ Problem Set - 2060
- HashTable用法,与字典区别
- 技术发展背后的那个人~~
- hdu 1864
- 由MRC向ARC转变
- Spring Java Mail发邮件
- ZOJ Problem Set - 3656 bit magic
- beyond compare使用
- HTTP 协议详解
- 替换文件夹下包含字符串的文件
- 空间伤感日子分享:这一刻,我输给了眼泪
- iOS strong 和weak的理解
- UBUNTU一句话技巧--Linux入门(给新手)
- . CO知识点
- SQL语言总结