[USACO Section 2.1]城堡 The Castle (搜索)
题目链接
Solution
比较恶心的搜索,思路很简单,直接广搜找联通块即可.
但是细节很多,要注意的地方很多.所以直接看代码吧...
Code
#include<bits/stdc++.h>
int mp[52][52],n,m,cnt;
int v[52][52],col[52][52];
int siz[2508],num,maxx,kk;
struct node{int x,y;};
struct point{int w,x,y;char ch;}ans[10002];
bool cmp(point s,point j){
if(s.w==j.w)
{
if(s.y==j.y)
{
if(s.x==j.x) return s.ch-'A'>j.ch-'A';
return s.x>j.x;
}
return s.y<j.y;
}
return s.w>j.w;}
using namespace std;
int read()
{
char ch=getchar(); int f=1,w=0;
while(ch<'0'||ch>'9'){ch=getchar();}
while(ch<='9'&&ch>='0'){w=w*10+ch-'0';ch=getchar();}
return f*w;
}
void bfs(int xx,int yy)
{
queue<node>q; cnt++;
q.push((node){xx,yy});
v[xx][yy]=1;
while(!q.empty())
{
node x=q.front(); q.pop();
int i=x.x,j=x.y;
col[i][j]=cnt;
siz[cnt]++;
int w=mp[i][j];
if(!(w>>0&1)) if(j>1&&!v[i][j-1])
q.push((node){i,j-1}),v[i][j-1]=1;
if(!(w>>1&1)) if(i>1&&!v[i-1][j])
q.push((node){i-1,j}),v[i-1][j]=1;
if(!(w>>2&1)) if(j<m&&!v[i][j+1])
q.push((node){i,j+1}),v[i][j+1]=1;
if(!(w>>3&1)) if(i<n&&!v[i+1][j])
q.push((node){i+1,j}),v[i+1][j]=1;
}
maxx=max(maxx,siz[cnt]);
}
void work(int x,int y)
{
for(int i=-1;i<2;i++)
for(int j=-1;j<2;j++)
if(abs(i+j)==1)
if(x+i>0&&x+i<=n)
if(y+j>0&&y+j<=m)
if(col[x+i][y+j]!=col[x][y])
{
if(siz[col[x+i][y+j]]+siz[col[x][y]]>=kk)
{
kk=siz[col[x+i][y+j]]+siz[col[x][y]];
js[x][y]++;
ans[++num].w=kk;ans[num].x=x;
ans[num].y=y;
if(i==1)ans[num].ch='S';
if(i==-1)ans[num].ch='N';
if(j==1)ans[num].ch='E';
if(j==-1)ans[num].ch='W';
}
}
}
int main()
{
m=read(); n=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mp[i][j]=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!v[i][j])
bfs(i,j);
cout<<cnt<<endl;
cout<<maxx<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
work(i,j);
sort(ans+1,ans+num+1,cmp);
cout<<kk<<endl;
int k=1;
for(int i=2;i<=num;i++)
{
if(ans[i].w!=kk)break;
if(ans[i].y!=ans[i].y&&ans[i-1].x!=ans[i-1].y)break;
while(ans[i].y==ans[i-1].y)
i++; k=i;
}
cout<<ans[1].x<<' '<<ans[1].y<<' '<<ans[1].ch<<endl;
return 0;
}
[USACO Section 2.1]城堡 The Castle (搜索)的更多相关文章
- 洛谷P1457 城堡 The Castle
P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO ...
- 洛谷 P1457 城堡 The Castle 解题报告
P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰" ...
- 洛谷 P1457 城堡 The Castle
P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这 ...
- USACO Section 2.1 The Castle 解题报告
题目 题目描述 有一个城堡,城堡中有若干个房间,房间与房间之间用墙来进行分隔.现在我们需要统计这个城堡有多少个房间,并且还要找出最大的房间的面积是多少(一个单元格就代表一个单元面积).城堡的主人现在想 ...
- USACO Section 2.1 The Castle
/* ID: lucien23 PROG: castle LANG: C++ */ /********************************************************* ...
- Usaco Training [2.1] The Castle 搜索
传送门 题目的输出的4个信息 前两个很容易,dfs,bfs都可以,图怎么建都可以 后两个在搜索的时候记录belong[i][j]和已有的size即可 代码应该比不少题解清晰吧 #include < ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
- P1457 城堡 The Castle
轻度中毒 原题 :The Castle 以下为题解部分:明明辣么简单的一道题,硬是搞了1.5h,WTF?以下列出本题的一些要点. 搜索(DFS)嘛,染色嘛,统计大小嘛,很容易想,也很更易处理. 接下来 ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
随机推荐
- 2018.4.12 各个系统安装MyEclipse过程(包括Mac、Linux、Windows)
首先下载MyEclipse 最新官网在这里http://www.myeclipsecn.com/ mac 安装 . 在安装第一步会显示 "安装myeclipse显示更低版本javase6&q ...
- 2018.3.4 Linux and Unix 知识点
UNIX系统的特点 1.多任务 2.多用户 3.强大的网络功能 4.设备无关性 5.并行处理能力 6.开放性 7.错误处理 Linux系统的特点 1.自由软件 2.良好的兼容性 3.良好的界面 4.丰 ...
- SC || Chapter 5 复习向
可复用性 ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 行为子结构 对于父子的继承关系的要求: ·子类可以增加方法,但不可以删 ·子类需实现抽象类型中未实现的方法 ·子类重写(override)的方法必须 ...
- javaweb基础(24)_jsp一般的标签开发
一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...
- cocos2dx 3.x for lua "异步加载"实现过程
在lua中,cocos2dx 建立的栈只能被一个线程(主线程)访问,如果在c++建立子线程,然后通过c++调用lua回调函数实现异步加载就会报错. 如果试图通过c++子线程直接实现加载资源,返回一个布 ...
- iOS下的2D仿射变换机制(CGAffineTransform相关)
仿射变换简介 仿射变换源于CoreGraphics框架,主要作用是绘制2D级别的图层,几乎所有iOS设备屏幕上的界面元素都是由CoreGraphics来负责绘制.而我们要了解的2D仿射变换是其下负责二 ...
- FFT快速傅里叶变化
纪念人生第一次FFT 前排感谢iamzky,讲解非常详细 #include<iostream> #include<cstdio> #include<cmath> u ...
- 201621123080《Java程序设计》第12周学习总结
201621123080<Java程序设计>第12周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系 ...
- Laravel核心解读--Console内核
Console内核 上一篇文章我们介绍了Laravel的HTTP内核,详细概述了网络请求从进入应用到应用处理完请求返回HTTP响应整个生命周期中HTTP内核是如何调动Laravel各个核心组件来完成任 ...
- python可视化动态图表: 关于pyecharts的sankey桑基图绘制
最近因工作原因,需要处理一些数据,顺便学习一下动态图表的绘制.本质是使具有源头的流动信息能够准确找到其上下级关系和流向. 数据来源是csv文件 导入成为dataframe之后,列为其车辆的各部件供应商 ...