[POJ]1164 The Castle
//markdown复制进来一堆问题 还是链接方便点
POJ 1164 The Castle
首先想到用9个方格来表示一个房间,如此一来复杂许多,MLE代码如下:
//Writer:GhostCai && His Yellow Duck
#include<iostream>
#define MAXN 50
using namespace std;
int m,n;
int a[MAXN][MAXN];
bool vis[MAXN][MAXN];
void opet(int num,int x,int y){
bool up=0,dn=0,lf=0,rt=0;//!!!
if(num>=8){
dn=1;
num-=8;
}
if(num>=4){
rt=1;
num-=4;
}
if(num>=2){
up=1;
num-=2;
}
if(num>=1){
lf=1;
}
a[x*2][y*2]=2;
if(up) a[x*2-1][y*2]=1,a[x*2-1][y*2+1]=1,a[x*2-1][y*2-1]=1;
if(dn) a[x*2+1][y*2]=1,a[x*2+1][y*2+1]=1,a[x*2+1][y*2-1]=1;
if(lf) a[x*2][y*2-1]=1,a[x*2+1][y*2-1]=1,a[x*2-1][y*2-1]=1;
if(rt) a[x*2][y*2+1]=1,a[x*2+1][y*2+1]=1,a[x*2-1][y*2+1]=1;
}
void dfs(int x,int y){
if(vis[x][y]) return;
if(x<1||x>m*2+1||y<1||y>n*2+1) return;
if(a[x][y]==1) return;
if(a[x][y]!=0) vis[x][y]=1;//!!
if(a[x][y]==2) a[x][y]=-1;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
int calc(){
int cnt=0;
for(register int i=1;i<=m*2+1;i++){
for(register int j=1;j<=n*2+1;j++){
if(a[i][j]==-1){
cnt++;
a[i][j]=2;
}
}
}
return cnt;
}
int main(){
cin>>m>>n;
int i,j;
int r;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cin>>r;
opet(r,i,j);
}
}
int ans=0,mx=0,cnt=0;
for(i=1;i<=m*2+1;i++) a[i][1]=1,a[i][n*2+1]=1;
for(i=1;i<=n*2+1;i++) a[1][i]=1,a[m*2+1][i]=1;
// for(i=1;i<=m*2+1;i++){
// for(j=1;j<=n*2+1;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
for(i=1;i<=m*2+1;i++){
for(j=1;j<=n*2+1;j++){
if(!vis[i][j]&&a[i][j]==2){
dfs(i,j);
cnt++;
ans=calc();
mx=max(ans,mx);
}
}
}
cout<<cnt<<endl<<mx<<endl;
return 0;
}
百般无奈下,重新思路。
想到其实没必要用9个方格,一个就挺好。
只不过在搜索的时候,利用数字判断一下这个方向走不走。
注意的一点是局部变量要赋初值,dfs里四个布尔位置变量一开始没有赋初值,导致奇怪的结果。
还是很像swim,嗯。
//Writer:GhostCai && His Yellow Duck
#include<iostream>
#define MAXN 200
using namespace std;
int m,n;
int a[MAXN][MAXN];
bool vis[MAXN][MAXN];
void dfs(int x,int y){
if(vis[x][y]) return;
if(x<1||x>m||y<1||y>n) return;
int d=a[x][y];
vis[x][y]=1;//!!
a[x][y]+=666;
bool lf=0,rt=0,up=0,dn=0;//!!!
if(d>=8){
d-=8;
dn=1;
}
if(d>=4){
d-=4;
rt=1;
}
if(d>=2){
up=1;
d-=2;
}
if(d>=1){
lf=1;
}
if(!lf) dfs(x,y-1);
if(!rt) dfs(x,y+1);
if(!dn) dfs(x+1,y);
if(!up) dfs(x-1,y);
}
int calc(){
int cnt=0;
for(register int i=1;i<=m;i++){
for(register int j=1;j<=n;j++){
if(a[i][j]>16){
cnt++;
a[i][j]-=666;
}
}
}
return cnt;
}
int main(){
int ans=0,mx=0,cnt=0;
cin>>m>>n;
int i,j;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(!vis[i][j]){
dfs(i,j);
cnt++;
ans=calc();
mx=max(mx,ans);
}
}
}
cout<<cnt<<endl<<mx<<endl;
}
[POJ]1164 The Castle的更多相关文章
- OpenJudge 2815 城堡问题 / Poj 1164 The Castle
1.链接地址: http://bailian.openjudge.cn/practice/2815/ http://poj.org/problem?id=1164 2.题目: 总时间限制: 1000m ...
- POJ 1164:The Castle
The Castle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6677 Accepted: 3767 Descri ...
- POJ 1164 城堡问题【DFS/位运算/种子填充法/染色法】
1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | ...
- POJ --- 1164 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24947 Accepted: 15887 Description ...
- poj 1164 深度优先搜索模板题
#include<iostream> //用栈进行的解决: #include<cstdio> #include<algorithm> #include<cst ...
- 计算几何--求凸包模板--Graham算法--poj 1113
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28157 Accepted: 9401 Description ...
- poj 1113:Wall(计算几何,求凸包周长)
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28462 Accepted: 9498 Description ...
- 【POJ】1113 Wall(凸包)
http://poj.org/problem?id=1113 答案是凸包周长+半径为l的圆的周长... 证明?这是个坑.. #include <cstdio> #include <c ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
随机推荐
- 日志组件Log2Net的介绍和使用(附源码开源地址)
Log2Net是一个用于收集日志到数据库或文件的组件,支持.NET和.NetCore平台. 此组件自动收集系统的运行日志(服务器运行情况.在线人数等).异常日志.程序员还可以添加自定义日志. 该组件支 ...
- JS高级学习历程-1
JS高级-34-昨天内容回顾 时间:2015-5-11 1.DOM获取元素节点 document.getElenmentById(id 属性值) ...
- asyncio模块
asyncio模块 这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念. asyncio 是干什么的? 异步网络操作 并发 协程 python3 ...
- 修复在unix系统里的文件打开不能显示正常的颜色问题
在mac上面看到mysql的配置文件的颜色永远是白色,为了让配置文件的颜色更加分明些,这个时候只需进入到home目录下新建一个.vimrc文件, vim .vimrc set nu syntax o ...
- Maven + Docker
一.设置POM.xml <build> <finalName>ROOT</finalName> <plugins> <plugin> < ...
- QQ免费企业邮箱申请配置
对于小企业来说,免费的企业邮箱是不错的选择,省去服务器费用和人员维护费用.在这里说一下,qq的免费企业邮箱.如果想搭建自己的企业邮局,请参考:centos extmail postfix nginx ...
- Django的模型与字段
Django的模型,包含字段field和操作方法,每个模型在数据库中映射为一张表. 基本原则: 每个model在django中是一个Python类 每个model都是django.db.models. ...
- 关于nodejs模块安装后找不到包解决办法
主要原因是类似bower.gulp这些包后,没有添加到环境变量,但是有洁癖的我也不希望添加太多的软链接,所以在用phpstorm开始时有需要的情况下 定义临时的环境变量 http://stackove ...
- 5个典型的JavaScript面试题
在IT界,需要大量的 JavaScript 开发者.如果你的能力能够胜任这一角色,那么你将获得许多换工作和提高薪水的机会.但是在你被公司录取之前,你需要展现你的技术,以便通过面试环节.在这篇文章中,我 ...
- Handler消息机制的一些原理(直接用code讲解)——Android开发
package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import android ...