来讨论区大摇大摆地逛了一圈后,我发现竟然大家的代码

都很长

然而代码真的要写那么长吗


首先,来分析问题,1,2,4,8,这些数显然是有特点的,也许你已经想到了没错,它们都是2的次方数。

1是2的0次方

2是2的1次方

4是2的2次方

8是2的3次方

知道这个就好办了,用什么呢?没错是位运算,哈哈!

1的二进制是1

2的二进制是10

4的二进制是100

8的二进制是1000

于是,就得出了以下代码:

if(x&1)a[i][j][0]=1;
if(x&2)a[i][j][1]=1;
if(x&4)a[i][j][2]=1;
if(x&8)a[i][j][3]=1;

大家也看到了,我用了一个3维数组,a[55][55][4]。

看到这道题,我首先想到的是宽搜(宽度优先搜索),用数组模拟,这道题的数据范围不大,用数组完全可能。

上代码:

#include <bits/stdc++.h>//用万能头文件开始了代码
using namespace std;//命名空间
int n,m,h[55][55],a[55][55][4],s,ans,z1,z2;
int q1[10010],q2[10010],f[10010];
int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
char z3;
string z="WNEA";
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
int x;
cin>>x;
if(x&1)a[i][j][0]=1;//位运算
if(x&2)a[i][j][1]=1;//位运算
if(x&4)a[i][j][2]=1;//位运算
if(x&8)a[i][j][3]=1;//位运算
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!h[i][j]){
int front=0,rear=1,sum=1;
q1[1]=i;
q2[1]=j;
h[i][j]=++s;
while(front<rear){//开始宽搜
front++;
int x=q1[front],y=q2[front];
for(int k=0;k<=3;k++){
int tx=x+dx[k],ty=y+dy[k];
if(tx>0&&tx<=n&&ty>0&&ty<=m&&!h[tx][ty]&&!a[x][y][k]){
h[tx][ty]=s;
sum++;
q1[++rear]=tx;
q2[rear]=ty;
}
}
}ans=max(ans,sum);
f[s]=sum;//记录编号s的房间的间数
}
cout<<s<<endl<<ans<<endl;
for(int j=1;j<=m;j++)//这里有坑
for(int i=n;i>=1;i--)//这里有坑
for(int k=1;k<=2;k++)
if(a[i][j][k]){
int tx=i+dx[k],ty=j+dy[k];
int x=f[h[tx][ty]]+f[h[i][j]];//活用数组下标
if(x>ans&&h[tx][ty]!=h[i][j]){//一定要注意h[tx][ty]!=h[i][j],有时候尽管有墙,但能通过别的房间,达到这个房间。(考虑要周全)
ans=x;
z1=i;
z2=j;
z3=z[k];
}
}
cout<<ans<<endl<<z1<<" "<<z2<<" "<<z3;
return 0;//华丽结束
}

题解 P1457 【城堡 The Castle】的更多相关文章

  1. 洛谷P1457 城堡 The Castle

    P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO ...

  2. 洛谷 P1457 城堡 The Castle 解题报告

    P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰" ...

  3. 洛谷 P1457 城堡 The Castle

    P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这 ...

  4. P1457 城堡 The Castle

    轻度中毒 原题 :The Castle 以下为题解部分:明明辣么简单的一道题,硬是搞了1.5h,WTF?以下列出本题的一些要点. 搜索(DFS)嘛,染色嘛,统计大小嘛,很容易想,也很更易处理. 接下来 ...

  5. 洛谷—— P1457 城堡 The Castle

    https://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特 ...

  6. P1457 城堡 The Castle 位运算+BFS+思维(难题,好题)

    题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰"(一种彩票).结果这张彩票让他获得了这次 ...

  7. 题解 洛谷P1457 【城堡 The Castle】

    这道题,看似很烦,无从下手,但其实只要用位运算和联通快就能水过了呀. 首先,输入:似乎大意是把一个数拆成二进数的相加,分别表示\((i,j)\)东南西北是否有墙.\(1\)表示西,\(2\)表示北,\ ...

  8. [USACO Section 2.1]城堡 The Castle (搜索)

    题目链接 Solution 比较恶心的搜索,思路很简单,直接广搜找联通块即可. 但是细节很多,要注意的地方很多.所以直接看代码吧... Code #include<bits/stdc++.h&g ...

  9. Luogu USACO Training 刷水记录

    开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...

随机推荐

  1. AndroidStudio实现AIDL

    AIDL的使用步骤 aidl远程调用传递的参数和返回值支持Java的基本类型(int long booen char byte等)和String,List,Map等.当然也支持一个自定义对象的传递. ...

  2. Wordpress 外网访问时不显示图片解决办法

    我的云服务器是 :windows2012R 打开命令行: 进入到mysql中 show databases; //查看你Wordpress使用的数据库是否存在 use blog; //例如你使用的数据 ...

  3. vim 编辑器技巧 打开多窗口编辑 vsp

    我有两个配置文件 [root@gameserver1 conf]# ls auth_1.json auth_2.json 先打开auth_2.json 在vim编辑器中打开auth_1.json,在打 ...

  4. Ubuntu 18.04安装搜狗输入法

    Ubuntu 18.04安装搜狗输入法 打开 terminal,输入 fcitx,检查是否安装搜狗输入法依赖,若提示未安装使用以下命令安装 sudo apt-get install fcitx-bin ...

  5. sql04

    1.类型转换 ),ClassId)+name from [user]; 2.一次性插入多条数据 3.日期函数 1)getdate() 返回当前日期 2)dateadd 计算增加后的时间 ,'2020- ...

  6. 用 Java 实现人脸识别功能(附源码)

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  7. Go coding in go way(用Go的思维去coding)

    本文是Tony Bai在2017年第三届GopherChina大会上所作,来源如下 https://tonybai.com/2017/04/20/go-coding-in-go-way/ 一.序 今天 ...

  8. 有关js的date的相关知识

    最近做项目,用了new Date().getTime()获取本地时间,但是如果用户篡改了手机时间,程序漏洞明显暴露.所以如果为保证程序的稳健安全性,应该是要使用网络时间的,也就是服务器时间.原理就是使 ...

  9. centOS 6.5 yum升级 gcc4.8 然后又退回来4.4

    CentOS 6.5 用了很多年了,一直舍不得省7 . 由于要用到 c++ 11 ,所以决定升级一下. 为了省事我选择用 yum 方式升级,结果最后还是不能用,差点搞坏,这是真机,重装麻烦了. get ...

  10. RStudio终端操作

    转于:https://support.rstudio.com/hc/en-us/articles/115010737148-Using-the-RStudio-Terminal#send 原文是英文版 ...