★The Castle 城堡
以一个几乎超乎想像的运气,农民约翰在他的生日收到了一张爱尔兰博彩的奖券.这一张奖券成为
了唯一中奖的奖券.农民约翰嬴得爱尔兰的乡下地方的一个传说中的城堡.
吹牛在他们威斯康辛州不算什么,农民约翰想告诉他的牛所有有关城堡的事.他想知道城堡有多少
房间,而且最大的房间有多大.事实上,他想去掉一面墙来制造一个更大的房间.
你的任务是帮助农民约翰去了解正确房间数目和大小.
城堡的平面图被分为 M(wide)*N(1 <=M,N<=50)个小正方形.
每个这样的小正方形有 0 到 4 面墙.
城堡在它的外部边缘总是有墙壁的,好遮挡风雨.
考虑这注解了一个城堡的平面图:
1 2 3 4 5 6 7
#############################
1 # | # | # | | #
#####---#####---#---#####---#
2 # # | # # # # #
#---#####---#####---#####---#
3 # | | # # # # #
#---#########---#####---#---#
4 # -># | | | | # #
#############################
# =墙壁 -, | = 没有墙壁
-> =移除这面墙能使得到的新房间最大
例子的城堡的大小是 7 x 4.
一个 "房间"是平面图上有连接的"小正方形"的集合.
这个平面图包含五个房间.(它们的大小是 9,7,3,1, 和 8 排列没有特别的顺序).
移除被箭作记号的墙壁来合并两个房间来制造最大的可能房间(移除一面墙所能产生的).
城堡总是至少有二个房间并且总是有一面墙壁以可能被移除.
PROGRAM NAME: castle
INPUT FORMAT
地图以一个表格来储存,每个数字描述一个小正方形,N 行每行 M 个数来描述这个平面图.
输入顺序符合那个在上面例子的编号方式.
每个描述小正方形的数字说明小正方形的四面的墙的分布情况,它是下面 4 个数的和:
1: 在西面有墙
2: 在北面有墙
22
4: 在东面有墙
8: 在南面有墙
内部的墙壁是会被定义两次;小正方形(1,1)南面的墙也被指出是小正方形(2,1)北面的墙.
第 1 行: 二个被空格分开的整数: M 和 N
第 2 到: N+1 行: M x N 个整数,每行 M 个.
SAMPLE INPUT (file castle.in)
7 4
11 6 11 6 3 10 6
7 9 6 13 5 15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13
OUTPUT FORMAT
输出包含一些行:
第 1 行: 城堡的房间数目.
第 2 行: 最大的房间的大小
第 3 行: 移除一面墙能得到的最大的房间的大小
第 4 行: 移除哪面墙
选择最佳的墙来移除,(选择最靠西的,如果仍然不能确定,再选择最靠南的.编者注:墙的位置应该
由它的中点来定义)
(【原文】Choose the optimal wall to remove from the set of optimal walls by choosing the
wall farther to the west (and then, if still tied, farthest to the south).)

墙壁由它在相邻的小正方形的西部或南方来命名

这题刚看到我就懵逼了,这什么鬼。然后就一直放在那,把2.1其他题目都做完了我又来搞他,看了题解(一定要耐心看代码==)慢慢看发现思路不难(当然自己写出来还是很难),用wall[i][j][k]再用右移运算来判断是否有墙。知道了思路后我就开写了然后。。。。。。。。。妈的。。。。。。一开始n,m跟我们平时的顺序不一样,一个坑然后)(选择最佳的墙来移除,(选择最靠西的,如果仍然不能确定,再选择最靠南的.编者注:墙的位置应该
由它的中点来定义))被这句话搞成傻逼。

/*
ID:jinbo wu
LANG:C++
TASK: castle
*/
#include<bits/stdc++.h>
using namespace std;
int vis[55][55];
int room[55][55];
int wall[55][55][4];
int roomn;
int size[55*55];
void dfs(int x,int y)
{vis[x][y]=1;if(room[x][y]==roomn)return;room[x][y]=roomn;size[roomn]++;if(!wall[x][y][0]) dfs(x,y-1);if(!wall[x][y][1]) dfs(x-1,y);if(!wall[x][y][2]) dfs(x,y+1);if(!wall[x][y][3]) dfs(x+1,y);
}
int main()
{int n,m,ax,ay;int tmp;int rmax1=0;char c;freopen("castle.in","r",stdin);freopen("castle.out","w",stdout);scanf("%d %d",&m,&n);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>tmp;for(int k=0;k<4;k++)wall[i][j][k]=(tmp>>k)&1;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(!vis[i][j]){roomn++;dfs(i,j);rmax1=max(rmax1,size[roomn]);}}cout<<roomn<<endl;cout<<rmax1<<endl;rmax1=0;for(int j=1;j<=m;j++)for(int i=n;i>=1;i--){int room1=room[i][j];int room2=room[i][j+1];int room3=room[i-1][j];if(i>1&&wall[i][j][1]&&room1!=room3&&size[room1]+size[room3]>rmax1){ax=i,ay=j;c='N';rmax1=size[room1]+size[room3];}if(j<m&&wall[i][j][2]&&room1!=room2&&size[room1]+size[room2]>rmax1){ax=i,ay=j;c='E';rmax1=size[room1]+size[room2];}}cout<<rmax1<<endl;cout<<ax<<" "<<ay<<" "<<c<<endl;
}

usaco The Castle相关推荐

  1. USACO The castle 小白代码-供参考(会不断更改代码)

    USACO The Castle.哇,这道题最后一问困扰了我好久,我刚开始以为拆墙的优先级是:以墙的朝向为优先级基准:E>N>S>W (这是错的❌,大错特错) 所以就一直就做不出来! ...

  2. usaco The Castle(flood fill)

    问题:城堡有n*m个方块组成,方块四周可能有墙,分别用1(W),2(N),4(E),8(S)来表示,每个方块由一个数字来表示,由四周的分布的墙值和来表示.要求求出城堡有多少个房间,最大房间的大小及删除 ...

  3. USACO The Castle Eventually Accepted

    一个简单的floodfill花了几个晚上来调试,数据几乎是一组一组过的,各种各样稀奇古怪的bug都出来了--狂汗! 不过终于--hoho~ 思路就是floodfill每一个未访问的格子,fill过程中 ...

  4. python逻辑与界面分离_一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  5. 【USACO 2.1】The Castle

    /* TASK: castle LANG: C++ SOLVE: 深搜,注意每个方向对应值.枚举去掉的墙,然后再dfs,注意墙要复原,并且dfs里要判断是否超出边界.*/ #include<cs ...

  6. USACO 做题小结

    还记得之前,发过一篇阶段性总结与未来规划..结果由于最近rp爆发(保研成功+进wf)后者显然靠bin神,前者也是运气.因此,放松了一段时间.然后就开始刷usaco了,原因是不用花时间找解题报告在NOC ...

  7. USACO2.11 The Castle hdu1198

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

  8. USACO-The Castle

    http://ace.delos.com/usacoprob2?a=B9V6yMSRsQa&S=castle 一题简单而综合的题,主要问题是输入数据的存储和处理. 我定义的存储方式: stru ...

  9. usaco Shaping Regions

    这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...

最新文章

  1. Open3D点云处理算法最全合集
  2. SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API
  3. 美国疫情加剧:特朗普检测虚惊一场,女儿伊万卡开始“隔离”,马云捐助百万口罩...
  4. etcd 集群故障(数据变成只读)
  5. EditText 显示明文和密码
  6. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
  7. Java中常用的测试工具JUnit
  8. [译]5 Mac OS X RSS Readers Worth Giving a Shot
  9. 生成 excel 直接用 httpServletResponse 输出
  10. java base64转文件_JAVA将Base64转为文件并保存详解
  11. SocketType 枚举----指定 Socket 类的实例表示的套接字的类型
  12. 精和泛的一点思考(跨学科思维)
  13. kafka依赖_Kafka集群搭建及必知必会
  14. 服务器修改文件后撮,xp系统的dns服务器修改办法.doc
  15. DDoS是什么意思?
  16. js调用数科阅读器_aspx调用js函数
  17. python项目简历内容包括哪些_python简历内容
  18. HoloLens2开发笔记-使用UWP原生MediaCapture解决图像捕获与WebRTC视频流冲突问题
  19. 【计算机网络学习笔记02】计算机网络概述(中)
  20. Nginx 配置问题 server directive is not allowed here in /etc/nginx/nginx.conf:69

热门文章

  1. 通过聚合数据API获取微信精选文章
  2. Lampiao靶机渗透测试
  3. bert速度提升fastbert
  4. 自然语言处理课程(二):Jieba分词的原理及实例操作
  5. LeetCode简单题之合并两个链表
  6. LeetCode简单题之排列硬币
  7. 大三后端暑期实习面经总结——SSM微服务框架篇
  8. SpringBoot整合MyBatis详细教程~
  9. PyTorch Data Parrallel数据并行
  10. WebRTC框架中的硬件加速