【POJ1753】Flip Game
【题目大意】
有一个4x4规格的一个棋盘,现在有16个一面黑一面白的棋子分布在这个棋盘上。
翻转一个棋子能够使它以及它上下左右的四个棋子从黑变白,从白变黑。
现在问你至少要经过多少次操作才能够使得整个棋盘的颜色相同。
【分析】
考虑到是4x4的规模,想到用BFS枚举+判重。
注意题目的内存限制是64MB,如果普通的用一个二维数组记录状态可能会超过内存限制。
考虑位运算,下面给出AC代码。
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <cmath>
#include <queue>
const int INF=0x7fffffff;
using namespace std;
struct map
{
int shu[];//位运算按行存储
int times;//翻转次数
map(){memset(shu,,sizeof(shu));}
}data;
bool hash[(<<)+];//哈希表 bool test(map t);//检测
map change(map t,int x,int y);
void print();//检测函数
int bfs();//广搜
int h(map t);//哈希函数 int main()
{
int i,j;
//文件操作
//freopen("data.txt","r",stdin);
//freopen("out.txt","w",stdout);
memset(data.shu,,sizeof(data.shu)); //读入数据
for (i=;i<=;i++)
{
if (i!=) getchar(); //读取换行符
for (j=;j<=;j++)
{
char temp;
scanf("%c",&temp);
//注意这里存储是从左向右存储
if (temp=='w') data.shu[i]=(data.shu[i]<<)+;
else data.shu[i]=(data.shu[i]<<)+;
}
}
int ans=bfs();
if (ans==INF) printf("Impossible\n");
else printf("%d",ans);
return ;
}
bool test(map t)//检测函数
{
int cnt=,i,j;
for (i=;i<=;i++) cnt+=t.shu[i];
if (cnt== || cnt==(*)) return ;
return ;
}
int bfs()
{
queue<map>Q;
memset(hash,,sizeof(hash));
int i,j;
data.times=;
hash[h(data)]=;
Q.push(data);//加入队列
while (!Q.empty())
{
map u=Q.front();Q.pop();
if (test(u)) return u.times;
for (i=;i<=;i++)
for (j=;j<=;j++)
{
map v=u;
v=change(v,i,j);
v.times=u.times+;
if (test(v)) return v.times;
if (hash[h(v)]==) continue;//哈希判重
Q.push(v);
hash[h(v)]=;
}
}
return INF;
}
int h(map t)//哈希函数
{
int temp=,i,j;
for (i=;i<=;i++) temp=(temp<<)+t.shu[i];
return temp;
}
//第x行,第y个
map change(map t,int x,int y)
{
t.shu[x]=((t.shu[x])^(<<(-y)));//本身
t.shu[x+]=((t.shu[x+])^(<<(-y)));//上面
t.shu[x-]=((t.shu[x-])^(<<(-y)));//下面
if (y!=) t.shu[x]=((t.shu[x])^(<<((-y)+)));//左边
if (y!=) t.shu[x]=((t.shu[x])^(<<((-y)-)));//右边
return t;
}
【POJ1753】Flip Game的更多相关文章
- 【LeetCode】字符串 string(共112题)
[3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...
- 【LeetCode】回溯法 backtracking(共39题)
[10]Regular Expression Matching [17]Letter Combinations of a Phone Number [22]Generate Parentheses ( ...
- 【Atcoder】ARC088 D - Wide Flip
[题目]D - Wide Flip [题意]给定n个数字的01序列,要求每次翻转>=k个数字使得全0,求最大的k.n<=10^5 [算法]数学 [题解]有两个角度可以得到等价的结论: 1. ...
- 181. Flip Bits【easy】
181. Flip Bits[easy] Determine the number of bits required to flip if you want to convert integer n ...
- 【Atcoder】ARC 080 F - Prime Flip
[算法]数论,二分图最大匹配 [题意]有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下. ...
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- 【ACM】魔方十一题
0. 前言打了两年的百度之星,都没进决赛.我最大的感受就是还是太弱,总结起来就是:人弱就要多做题,人傻就要多做题.题目还是按照分类做可能效果比较好,因此,就有了做几个系列的计划.这是系列中的第一个,解 ...
- 【转】Netty那点事(二)Netty中的buffer
[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch2-buffer.md 上一篇文章我们概要介绍了Netty的原 ...
随机推荐
- The Cow Lexicon(dp)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7290 Accepted: 3409 Description Few k ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- vim下缩进及高亮设置
1.配置文件的位置 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效.而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc” ...
- 遇到的retain cycle例子
retain cycle 会造成内存溢出,严重情况会引起崩溃.一般注意点也不会发生,但在网络连接比较多的地方就会不小心出现,vc异步的网络请求,成功后的block调用vc,如果此时,用户已经不用此vc ...
- maven profile实现多环境打包
快速解决: 项目目录 1.pom文件中添加profile <profiles> <profile> <!-- 本地开发环境 --> <id>dev< ...
- TCP/UDP 、HTTP、IP 、socket 的关系。
网络有上下分为7 层.物理层,数据链路层.网络层.会话层.应用层.传输层: IP协议位于网络层,IP和端口来控制网络流向: TCP.UDP是基于传输层.TCP保证三次握手.传递数据: UDP为不考虑是 ...
- 给想上MIT的牛学生说几句
[来信] 老师您好! 非常冒昧的来打搅您,仅仅是在学习上实在有些困惑才来向您求教一番. 我是计算机科学与技术的大一学生,我非常喜欢我自己的专业,可是学校里讲的东西太慢,太浅,所以我一般都是自学,我在自 ...
- [PWA] 4. Hijacking Request
We want to do offline first, the first thing we need to do is we should able to catch the browser re ...
- jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档
原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...
- [转] 多线程下变量-gcc原子操作 __sync_fetch_and_add等
http://blog.sina.com.cn/s/blog_6f5b220601013zw3.html 非常好的原子操作,不用加锁:__sync_fetch_and_add GCC 提供的原子操作 ...