问题标题: 求助难题

0
0
已解决
郑金顺
郑金顺
中级光能
中级光能

题目描述

以我们憨厚的USACO主人公农夫约翰(Farmer John) 无法想象的运气, 我们的农夫约翰在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让我们的农夫约翰获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡!(RP...) 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康辛老家开始吹嘘了, 农夫约翰想要告诉他的奶牛们关于他的城堡的一切。他需要做一些吹嘘的准备工作:比如说知道城堡有多少个房间,每个房间有多大。而且农夫约翰想要把一个单独的墙(指两个单位间的墙)给拆掉以获得一个更大的房间。 你的工作就是帮农夫约翰做吹嘘的准备,算出房间数与房间的大小。 城堡的平面图被划分成M*N(M是宽度)个正方形的单位,一个这样的单位可以有0到4面墙环绕。城堡周围一定有外墙环绕以遮风挡雨。(就是说平面图的四周一定是墙。) 请仔细研究下面这个有注解的城堡平面图:

     1   2   3   4   5   6   7
   #############################
 1 #   |   #   |   #   |   |   #
   #####---#####---#---#####---#   
 2 #   #   |   #   #   #   #   #
   #---#####---#####---#####---#
 3 #   |   |   #   #   #   #   #   
   #---#########---#####---#---#
 4 # ->#   |   |   |   |   #   #   
   #############################
# =墙壁    -,| = 没有墙壁
-> =指向一面墙,这面墙推掉的话我们就有一间最大的新房间

友情提示,这个城堡的平面图是7×4个单位的。一个“房间”指的是平面图中一个连通的“正方形单位”的集合。比如说这个样例就有5个房间。(大小分别为9、7、3、1、8个单位(排名不分先后)) 移去箭头所指的那面墙,可以使2个房间合为一个“移掉一面单独的墙可以形成的最大的新房间”。(原文为:Removing the wall marked by the arrow merges a pair of rooms to make the largest possible room that can be made by removing a single wall. ) 城堡保证至少有2个房间,而且一定有一面墙可以被移走。

 

输入

城堡的平面图用一个由数字组成的矩阵表示,一个数字表示一个单位,矩阵有N行M列。输入与样例的图一致。 每一个单位的数字告诉我们这个单位的东西南北是否有墙存在。每个数字是由以下四个整数的某个或某几个或一个都没有加起来的。 1: 在西面有墙 2: 在北面有墙 4: 在东面有墙 8: 在南面有墙 城堡内部的墙会被规定两次。比如说(1,1)南面的墙,亦会被标记为(2,1)北面的墙。 第 1 行: 二个被空格分开的整数: M 和 N(N,M<=50) 第 2 到 N+1 行: M x N 个整数,每行M个。

 

输出

输出包含一下4行: 第 1 行: 城堡的房间数目。 第 2 行: 最大的房间的大小 第 3 行: 移除一面墙能得到的最大的房间的大小 第 4 行: 移除哪面墙 要造出第三行那么大的大房间所要推倒的一面墙。 选择最佳的墙来推倒。有多解时选最西边的(还是有多解时选最南的)。用这面墙南边或西边的单位,还有这面墙在那个单位的方位("N"(北)或者"E"(东))来表示这面墙。

 

样例输入 

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

样例输出 

5 9 16 4 1 E

郑金顺在2020-02-10 16:34:42追加了内容


0
已采纳
李致远
李致远
高级光能
高级光能

#include <bits/stdc++.h>//用万能头文件开始了代码
using namespace std;//命名空间
//一堆变量自己定义 
?? z3;
string z="???";
int main() {
    cin>>m>>n;
    //省略了一个for 
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(!h[i][j]) {
                int front=?,rear=?,sum=?;//自己想 
                q1[1]=i;
                q2[1]=j;
                h[?][?]=?;
                while(/*开始宽搜,while写什么?自己想*/) { 
                    front++;
                    int x=,y=;//自己想 
                    for(int k=0; k<=3; k++) {
                        int tx=x+dx[k],ty=y+dy[k];
                        if(/*if内条件较为复杂*/) {
                            ?
                        }
                    }
                }
                //取max和ans的最大值,怎么写?自己想 
                f[s]=sum;//记录编号s的房间的间数
            }
    //输出什么自己想 
    for(int j=; j<=; j++) //这里有坑
        for(int i=; i>=; i) //这里有坑
            for(int k=1; k<=2; k++)
                if(a[i][j][k]) {
                    int tx=?;
                    int x=?;//活用数组下标
                    //一定要注意h[tx][ty]!=h[i][j],有时候尽管有墙,但能通过别的房间,达到这个房间。(考虑要周全)//判断自己想 
                    { 
                        ??? 
                    }
                }
    //输出自己想 
    return 0;//华丽结束
    //有很多省略的部分请自己想! 
}

李致远在2020-03-29 16:25:32追加了内容

bushi 整段代码!

bushi 核心代码!

0
郑金顺
郑金顺
中级光能
中级光能

外面的题

 

各位大神,求答案

0
0
徐子玄
徐子玄
初级光能
初级光能

是落谷的题吗?

徐子玄在2020-02-18 14:14:26追加了内容

是洛谷的题吗?

0
0
0
郑金顺
郑金顺
中级光能
中级光能

不是落谷

是一个叫oj的

0
0
0
被禁言 何冯成
何冯成
中级光能
中级光能

题号!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11

0
0
0
0
0
0
我要回答