题意:给你一个 n * n 的 01 矩阵,现在你的任务是将这个矩阵中尽量少的 0 转化为 1 ,使得每个数的上下左右四个相邻的数加起来是偶数。求最少的转化个数。

新风格代码

lrj书上说的很清楚了,就是判断下一行的代码有点冗余了,但是很好理解,就是模拟每位有的数字之和,然后判断未知为应该填的数字

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. #include<map>
  8. using namespace std;
  9. #define MOD 1000000007
  10. const int INF=0x3f3f3f3f;
  11. const double eps=1e-;
  12. typedef long long ll;
  13. #define cl(a) memset(a,0,sizeof(a))
  14. #define ts printf("\n*****\n");
  15. #define sc(a) scanf("%d",&a);
  16. #define pt(a) printf("%d\n",a);
  17. const int MAXN=;
  18.  
  19. //define single variable
  20.  
  21. int n,m,tt;
  22. int ans,sum,sum1,sum2,tot,Max;
  23.  
  24. //define arrays
  25. int a[MAXN][MAXN],b[MAXN][MAXN];
  26. char s[MAXN];
  27. int vis[MAXN];
  28. //define struct
  29. struct Node
  30. {
  31. int x,y;
  32. Node(){}
  33. /*Node(int xx,int yy,int tt)
  34. {
  35.  
  36. }*/
  37. void in()
  38. {
  39. scanf("%d%d",&x,&y);
  40. }
  41. }node[MAXN];
  42.  
  43. //others
  44. bool cmp(Node a,Node b)
  45. {
  46. return a.y>b.y;
  47. }
  48.  
  49. void init()
  50. {
  51. ans=INF,sum=,sum1=,sum2=,tot=,Max=;
  52. //cl(vis);
  53. //cl(node);
  54. cl(a),cl(b);
  55. }
  56.  
  57. int check(int st)
  58. {
  59. //printf("st: %d\n",st);
  60. cl(b);
  61. int w=;
  62. int i,j,k;
  63. for(i=;i<n;i++)
  64. {
  65. if(st&(<<i))
  66. {
  67. b[][i]=;
  68. }
  69. else b[][i]=;
  70. }
  71. /*for(i=0;i<n;i++)
  72. {
  73. printf("%d ",b[0][i]);
  74. }
  75. printf("\n");*/
  76. for(i=;i<n;i++)
  77. {
  78. for(j=;j<n;j++)
  79. {
  80. if(a[i][j]==&&b[i][j]==) return INF; //注意只能由0变成1,不能从1变成0
  81. w=;
  82. if(i==) //在顶层
  83. {
  84. if(j==) //在顶层左上角
  85. {
  86. w=b[i][j+];
  87. }
  88. else if(j==n-) //顶层右上角
  89. {
  90. w=b[i][j-];
  91. }
  92. else w=b[i][j-]+b[i][j+];
  93. }
  94. else if(i==n-)
  95. {
  96. if(j==)
  97. {
  98. w=b[i][j+]+b[i-][j];
  99. }
  100. else if(j==n-)
  101. {
  102. w=b[i-][j]+b[i][j-];
  103. }
  104. else w=b[i-][j]+b[i][j+]+b[i][j-];
  105. if(w%!=) return INF;
  106. }
  107. else
  108. {
  109. if(j==)
  110. {
  111. w=b[i-][j]+b[i][j+];
  112. }
  113. else if(j==n-)
  114. {
  115. w=b[i-][j]+b[i][j-];
  116. }
  117. else
  118. {
  119. w=b[i-][j]+b[i][j-]+b[i][j+];
  120. }
  121. }
  122. b[i+][j]=w%==?:;
  123. }
  124. }
  125. /*ts
  126. for(i=0;i<n;i++)
  127. {
  128. for(j=0;j<n;j++)
  129. {
  130. printf("%d ",b[i][j]);
  131. }
  132. printf("\n");
  133. }
  134. ts*/
  135. int cnt=;
  136. for(i=;i<n;i++)
  137. for(j=;j<n;j++)
  138. {
  139. if(a[i][j]!=b[i][j]) cnt++;
  140. }
  141. return cnt;
  142. }
  143.  
  144. int main()
  145. {
  146. int i,j,k,ca=;
  147. #ifndef ONLINE_JUDGE
  148. freopen("1.in","r",stdin);
  149. #endif
  150.  
  151. scanf("%d",&tt);
  152. while(tt--)
  153. {
  154. printf("Case %d: ",ca++);
  155. init();
  156. sc(n)
  157. for(i=;i<n;i++)
  158. for(j=;j<n;j++)
  159. sc(a[i][j])
  160. for(i=;i<(<<n);i++)
  161. {
  162. ans=min(ans,check(i));
  163. }
  164. if(ans==INF) ans=-;
  165. pt(ans)
  166. }
  167. }

UVA 11464 暴力+位运算 ***的更多相关文章

  1. UVA 690 PipelineScheduling 位运算+dfs+剪枝

    一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化. 预处理:预判一下并保存下一个可以放的位置距离之前的距离.这样可以减少很多判断. 最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于 ...

  2. Gym - 100203A Ariel 暴力+位运算

    题意:第i种生物有k[i]个特征,分数是score[i],现在要参加竞赛,报出一种生物a,和一些特征h[i],参加竞赛的所有生物在这些h[i]上面的特征是一样的,a生物有h[i],则所有竞赛的生物都必 ...

  3. uva 818 (位运算 + 判环)

     Cutting Chains  What a find! Anna Locke has just bought several links of chain some of which may be ...

  4. UVa 818Cutting Chains (暴力dfs+位运算+二进制法)

    题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...

  5. UVA - 13022 Sheldon Numbers(位运算)

    UVA - 13022 Sheldon Numbers 二进制形式满足ABA,ABAB数的个数(A为一定长度的1,B为一定长度的0). 其实就是寻找在二进制中满足所有的1串具有相同的长度,所有的0串也 ...

  6. uva 10718 Bit Mask (位运算)

    uva 10718  Bit Mask  (位运算) Problem A Bit Mask Time Limit 1 Second In bit-wise expression, mask is a ...

  7. 【UVA】658 - It&#39;s not a Bug, it&#39;s a Feature!(隐式图 + 位运算)

    这题直接隐式图 + 位运算暴力搜出来的,2.5s险过,不是正法,做完这题做的最大收获就是学会了一些位运算的处理方式. 1.将s中二进制第k位变成0的处理方式: s = s & (~(1 < ...

  8. UVA 10718 Bit Mask 贪心+位运算

    题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小. 很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚... 然后网上翻到了一个人家位运算一句话解决 ...

  9. UVA 565 565 Pizza Anyone? (深搜 +位运算)

      Pizza Anyone?  You are responsible for ordering a large pizza for you and your friends. Each of th ...

随机推荐

  1. Android Studio导入第三方jar包

    直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile fileTree(dir: 'libs', ...

  2. 解决:Windows 开机弹出AotuIt ERROR 错误

    AutoIt是个脚本语言,常被用于自动化安装.网络上有些系统镜像里含有AutoIt脚本,用于系统的自动配置.出现这种问题往往有两种可能的原因: 1)做系统的时候没搞好.这种情况就需要换一个镜像文件. ...

  3. <<< tomcat启动报错StandardServer.await: create[8005]

    启动tomcat的时候出现异常 严重: StandardServer.await: create[8005]: java.net.BindException: Address already in u ...

  4. <<< Oracle序列的创建、修改、删除基本操作

    序列是一个命名的顺序编号生成器,可以被多个用户共享,类似sqlserver中的identity create sequence 序列名; //直接创建一个序列 CREATE SEQUENCE 序列名; ...

  5. 山东第一届省赛1001 Phone Number(字典树)

    Phone Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 We know that if a phone numb ...

  6. git push如何至两个git仓库

    分别有仓库 A(github),B(JAE 的 git),本机为C. 假设以 a 仓库作为最终的使用仓库, b为发布仓库.分支都为 dev 第一步,增加远程仓库 git remote add orig ...

  7. Windows远程数据同步工具cwRsync

    1. cwRsync简介cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件.cwRsync主要用于Windows上的远程文 ...

  8. 增加UBUNTU字符集 解决中文乱码问题

    对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...

  9. 常见input输入框 点击 发光白色外阴影 focus

    先看看具体实现的效果 第一就是点击input 实现的效果 默认谷歌点击input是蓝色边框 去掉用outline:0;  实现效果用focus  默认状态的边框颜色一般较重 如border:1px s ...

  10. C#中精确计时的一点收获 【转】

    C#中精确计时的一点收获 [转] 以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @  3.00GHz 2.99GHz,2.96G ...