uvaoj 11464 - Even Parity
2015-10-27 14:20
232 查看
用宏定义好爽
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define MAXN 17 #define F(i,n) for(int i = 0;i < (n);i++) #define INF 0x3f3f3f3f bool A[MAXN][MAXN],B[MAXN][MAXN]; int _,n,ans; bool _find(int i,int j) { int cnt = 0; if(i - 1 >= 0)cnt += B[i - 1][j]; if(j - 1 >= 0)cnt += B[i][j - 1]; if(j + 1 < n)cnt += B[i][j + 1]; if(i + 1 < n)cnt += B[i + 1][j]; if(cnt % 2 == 0)return true; if(i + 1 == n || B[i + 1][j])return false; return B[i + 1][j] = true; } int check(int s) { memcpy(B,A,sizeof(A)); F(i,n)if(s >> i & 1)B[0][i] = true; F(i,n)F(j,n)if(!_find(i,j))return INF; int cnt = 0; F(i,n)F(j,n)if(A[i][j] != B[i][j])cnt++; return cnt; } int main() { cin >> _; F(kcas,_) { cin >> n; F(i,n)F(j,n)cin >> A[i][j]; ans = INF; F(i,(1 << n))ans = min(ans,check(i)); if(ans == INF)printf("Case %d: -1\n",kcas + 1); else printf("Case %d: %d\n",kcas + 1,ans); } }
相关文章推荐
- 枚举的用法详细总结
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- 理解C#中的枚举(简明易懂)
- C#枚举中的位运算权限分配浅谈
- C++基础入门教程(四):枚举和指针
- FileShare枚举的使用小结(文件读写锁)
- Java枚举类用法实例
- 枚举窗口句柄后关闭所有窗口示例
- javascript模拟枚举的简单实例
- 深入剖析JavaScript中的枚举功能
- 枚举和宏的区别详细解析
- 深入理解C#中的枚举
- C#实现获取枚举中元素个数的方法
- java中枚举的详细使用介绍
- java枚举的使用示例
- Java枚举详解及使用实例(涵盖了所有典型用法)
- 一个运用enum类型的Demo
- 枚举隐式派生于System.Enum
- 枚举的隐士转换跟显示转换
- Java 枚举7常见种用法