老天待我不薄,又来这么一题POJ1753
还是位运算+BFS系列题;
现在这种真是无比喜欢,今天搞了一上午这题。。。因为状态的改变写错了…T.T
#include<cstdio>
#include<queue>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int head,tail;
bool vis[1<<17];
int step[1<<17];
int q[1<<17];
int judge(int x)
{
if(x>=0&&x<=15)
return 1;
return 0;
}
int change[16] = //16种状态转换,对应4*4的翻子位置
{
51200,58368,29184,12544,
35968,20032,10016,4880,
2248,1252,626,305,
140,78,39,19
};
int bfs(int x)
{
memset(vis,0,sizeof(vis));
memset(step,0,sizeof(step));
head=0;
tail=1;
step[x]=0;
vis[x]=1;
q[head]=x;
while(head<tail)
{
int v=q[head];
head++;
int ne;
if(v==0||v==(65535))
{
return step[v];
}
//这波状态真是写到吐血,一开始没怎么注意...
for(int i=0; i<16; i++)
{
ne=v;
int u=0;
if(i==0)
{
u=(1<<0)|(1<<1)|(1<<4);
}
else if(i==2||i==1)
{
int a,b,c;
a=i-1;
b=i+1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==3)
{
u=(1<<2)|(1<<7);
u^=(1<<i);
}
else if(i==4||i==8)
{
int a,b,c;
a=i-4;
b=i+1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==5||i==6||i==9||i==10)
{
int a,b,c,d;
a=i-1;
b=i+1;
c=i+4;
d=i-4;
u=(1<<a)|(1<<b)|(1<<c)|(1<<d);
u^=(1<<i);
}
else if(i==7||i==11)
{
int a,b,c;
a=i-4;
b=i-1;
c=i+4;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==12)
{
u=(1<<8)|(1<<13);
u^=(1<<i);
}
else if(i==13||i==14)
{
int a,b,c;
a=i-4;
b=i+1;
c=i-1;
u=(1<<a)|(1<<b)|(1<<c);
u^=(1<<i);
}
else if(i==15)
{
u=(1<<14)|(1<<11);
u^=(1<<i);
}
ne^=u;
//ne=v^change[i]; //说多了都是泪
if(!vis[ne])
{
vis[ne]=1;
step[ne]=step[v]+1;
if(ne==0||ne==(65535))
{
return step[ne];
}
q[tail++]=ne;
}
}
}
return -1;
}
int main()
{
int i,j;
char s[5][5];
while(~scanf("%s",s[0]))
{
for(i=1;i<4;i++)
scanf("%s",s[i]);
int ans=0;
for(i = 0 ; i < 4 ; ++i)
{
for(j = 0 ; j < 4 ; ++j)
{
if(s[i][j]=='b')
ans|=(1<<(i*4+j));
}
}
int qq=bfs(ans);
if(qq!=-1)
printf("%d\n",qq);
else
printf("Impossible\n");
}
}
/*
bwwb
bbwb
bwwb
bwww
*/
老天待我不薄,又来这么一题POJ1753的更多相关文章
- (转)一个大牛的acm历程(看着就要颤抖)
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- 我的ACM参赛故事
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- 第一次训练 密码:acmore
#include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
- 合并多个工作薄workbooks到一个工作薄workbook
微软示例教程 微软示例教程 Sub MergeAllWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim NRo ...
- wex5 实战 省市县三级联动与地址薄同步
无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2: 地址薄选项,利用inputSel ...
- DEDECMS 留言薄模块的使用方法
一.留言薄的安装 留言薄的安装过程和其他插件一样,首先我们进入后台模块管理列表,点击其对应的“安装”: 以上步骤,我们完成了留言薄插件的安装. 二.留言薄的卸载 留言薄的卸载,同样首先我们要进入模块管 ...
- 如何把一个excel工作薄中N个工作表复制到另一个工作薄中
一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...
- iOS:访问地址薄
地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验. ...
随机推荐
- 分布式搜索elasticsearch 基本概念
ElasticSearch官网:http://www.elasticsearch.org/ 先上一张elasticsearch的整体框架图: ElasticSearch是基于Lucene开发的分布式搜 ...
- SQL SELECT TOP, LIMIT, ROWNUM 子句
SQL SELECT TOP, LIMIT, ROWNUM 子句 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP 子句对于拥有数千条记 ...
- win32收不到F10按键消息解决的方法
在WM_KEYDOWN中处理F10(VK_F10)消息总是获取不到,后来用spy++监听窗体消息发现按下F10并没有WM_KEYDOWN消息产生,而是产生了WM_SYSKEYDOWN
- 多重继承下的virtual functions
有如下图所示的继承关系: 有如下代码示例: 在早期的未符合c++标准的的编译器上是会报错的,因为对于clone()函数来说,编译器不知道怎么处理处理.但是时至今日c ...
- hdu 3746 Cyclic Nacklace (KMP求最小循环节)
//len-next[len]为最小循环节的长度 # include <stdio.h> # include <algorithm> # include <string. ...
- Python 模块的安装与使用
我们知道使用函数不仅减轻了工作量,而且使代码更加简洁,更加的易于维护.但如果在另一个文件中,我们希望使用上一个文件中定义的某个函数,我们应该怎么办呢?我们需要重新将上一个函数再次实现一遍吗?而且,当我 ...
- 使用Axis2开发WebService
一.准备 1.下载Axis2.eclipse插件 axis2-1.6.2-war.zip: http://mirror.bjtu.edu.cn/apache//axis/axis2/java/core ...
- forEach、for-in与for-of的区别
forEach.for-in与for-of的区别 forEach介绍 objArr.forEach(function (value) { console.log(value); }); foreach ...
- RedHat 安装Hadoop并运行wordcount例子
1.安装 Red Hat 环境 2.安装JDK 3.下载hadoop2.8.0 http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/had ...
- Mac OS安装Scrapy
个人觉得掌握简单的爬虫知识非常有用,特别是想要从一些特定网站自动地下载一些资源或者统计一些数据,非常的有用.对于产品经理来说,如果要了解竞争产品.替代产品的价格,可以写一个爬虫脚本从各大电商网站爬取相 ...