UVA 11464 暴力+位运算 ***
题意:给你一个 n * n 的 01 矩阵,现在你的任务是将这个矩阵中尽量少的 0 转化为 1 ,使得每个数的上下左右四个相邻的数加起来是偶数。求最少的转化个数。
新风格代码
lrj书上说的很清楚了,就是判断下一行的代码有点冗余了,但是很好理解,就是模拟每位有的数字之和,然后判断未知为应该填的数字
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<queue>
- #include<map>
- using namespace std;
- #define MOD 1000000007
- const int INF=0x3f3f3f3f;
- const double eps=1e-;
- typedef long long ll;
- #define cl(a) memset(a,0,sizeof(a))
- #define ts printf("\n*****\n");
- #define sc(a) scanf("%d",&a);
- #define pt(a) printf("%d\n",a);
- const int MAXN=;
- //define single variable
- int n,m,tt;
- int ans,sum,sum1,sum2,tot,Max;
- //define arrays
- int a[MAXN][MAXN],b[MAXN][MAXN];
- char s[MAXN];
- int vis[MAXN];
- //define struct
- struct Node
- {
- int x,y;
- Node(){}
- /*Node(int xx,int yy,int tt)
- {
- }*/
- void in()
- {
- scanf("%d%d",&x,&y);
- }
- }node[MAXN];
- //others
- bool cmp(Node a,Node b)
- {
- return a.y>b.y;
- }
- void init()
- {
- ans=INF,sum=,sum1=,sum2=,tot=,Max=;
- //cl(vis);
- //cl(node);
- cl(a),cl(b);
- }
- int check(int st)
- {
- //printf("st: %d\n",st);
- cl(b);
- int w=;
- int i,j,k;
- for(i=;i<n;i++)
- {
- if(st&(<<i))
- {
- b[][i]=;
- }
- else b[][i]=;
- }
- /*for(i=0;i<n;i++)
- {
- printf("%d ",b[0][i]);
- }
- printf("\n");*/
- for(i=;i<n;i++)
- {
- for(j=;j<n;j++)
- {
- if(a[i][j]==&&b[i][j]==) return INF; //注意只能由0变成1,不能从1变成0
- w=;
- if(i==) //在顶层
- {
- if(j==) //在顶层左上角
- {
- w=b[i][j+];
- }
- else if(j==n-) //顶层右上角
- {
- w=b[i][j-];
- }
- else w=b[i][j-]+b[i][j+];
- }
- else if(i==n-)
- {
- if(j==)
- {
- w=b[i][j+]+b[i-][j];
- }
- else if(j==n-)
- {
- w=b[i-][j]+b[i][j-];
- }
- else w=b[i-][j]+b[i][j+]+b[i][j-];
- if(w%!=) return INF;
- }
- else
- {
- if(j==)
- {
- w=b[i-][j]+b[i][j+];
- }
- else if(j==n-)
- {
- w=b[i-][j]+b[i][j-];
- }
- else
- {
- w=b[i-][j]+b[i][j-]+b[i][j+];
- }
- }
- b[i+][j]=w%==?:;
- }
- }
- /*ts
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- {
- printf("%d ",b[i][j]);
- }
- printf("\n");
- }
- ts*/
- int cnt=;
- for(i=;i<n;i++)
- for(j=;j<n;j++)
- {
- if(a[i][j]!=b[i][j]) cnt++;
- }
- return cnt;
- }
- int main()
- {
- int i,j,k,ca=;
- #ifndef ONLINE_JUDGE
- freopen("1.in","r",stdin);
- #endif
- scanf("%d",&tt);
- while(tt--)
- {
- printf("Case %d: ",ca++);
- init();
- sc(n)
- for(i=;i<n;i++)
- for(j=;j<n;j++)
- sc(a[i][j])
- for(i=;i<(<<n);i++)
- {
- ans=min(ans,check(i));
- }
- if(ans==INF) ans=-;
- pt(ans)
- }
- }
UVA 11464 暴力+位运算 ***的更多相关文章
- UVA 690 PipelineScheduling 位运算+dfs+剪枝
一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化. 预处理:预判一下并保存下一个可以放的位置距离之前的距离.这样可以减少很多判断. 最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于 ...
- Gym - 100203A Ariel 暴力+位运算
题意:第i种生物有k[i]个特征,分数是score[i],现在要参加竞赛,报出一种生物a,和一些特征h[i],参加竞赛的所有生物在这些h[i]上面的特征是一样的,a生物有h[i],则所有竞赛的生物都必 ...
- uva 818 (位运算 + 判环)
Cutting Chains What a find! Anna Locke has just bought several links of chain some of which may be ...
- UVa 818Cutting Chains (暴力dfs+位运算+二进制法)
题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...
- UVA - 13022 Sheldon Numbers(位运算)
UVA - 13022 Sheldon Numbers 二进制形式满足ABA,ABAB数的个数(A为一定长度的1,B为一定长度的0). 其实就是寻找在二进制中满足所有的1串具有相同的长度,所有的0串也 ...
- uva 10718 Bit Mask (位运算)
uva 10718 Bit Mask (位运算) Problem A Bit Mask Time Limit 1 Second In bit-wise expression, mask is a ...
- 【UVA】658 - It's not a Bug, it's a Feature!(隐式图 + 位运算)
这题直接隐式图 + 位运算暴力搜出来的,2.5s险过,不是正法,做完这题做的最大收获就是学会了一些位运算的处理方式. 1.将s中二进制第k位变成0的处理方式: s = s & (~(1 < ...
- UVA 10718 Bit Mask 贪心+位运算
题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小. 很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚... 然后网上翻到了一个人家位运算一句话解决 ...
- UVA 565 565 Pizza Anyone? (深搜 +位运算)
Pizza Anyone? You are responsible for ordering a large pizza for you and your friends. Each of th ...
随机推荐
- Android Studio导入第三方jar包
直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile fileTree(dir: 'libs', ...
- 解决:Windows 开机弹出AotuIt ERROR 错误
AutoIt是个脚本语言,常被用于自动化安装.网络上有些系统镜像里含有AutoIt脚本,用于系统的自动配置.出现这种问题往往有两种可能的原因: 1)做系统的时候没搞好.这种情况就需要换一个镜像文件. ...
- <<< tomcat启动报错StandardServer.await: create[8005]
启动tomcat的时候出现异常 严重: StandardServer.await: create[8005]: java.net.BindException: Address already in u ...
- <<< Oracle序列的创建、修改、删除基本操作
序列是一个命名的顺序编号生成器,可以被多个用户共享,类似sqlserver中的identity create sequence 序列名; //直接创建一个序列 CREATE SEQUENCE 序列名; ...
- 山东第一届省赛1001 Phone Number(字典树)
Phone Number Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 We know that if a phone numb ...
- git push如何至两个git仓库
分别有仓库 A(github),B(JAE 的 git),本机为C. 假设以 a 仓库作为最终的使用仓库, b为发布仓库.分支都为 dev 第一步,增加远程仓库 git remote add orig ...
- Windows远程数据同步工具cwRsync
1. cwRsync简介cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件.cwRsync主要用于Windows上的远程文 ...
- 增加UBUNTU字符集 解决中文乱码问题
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- 常见input输入框 点击 发光白色外阴影 focus
先看看具体实现的效果 第一就是点击input 实现的效果 默认谷歌点击input是蓝色边框 去掉用outline:0; 实现效果用focus 默认状态的边框颜色一般较重 如border:1px s ...
- C#中精确计时的一点收获 【转】
C#中精确计时的一点收获 [转] 以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @ 3.00GHz 2.99GHz,2.96G ...