usaco4.4.3 Frame Up

USACO Frame Up 解题报告 这道题比较简单(虽然还是经过4次才过了suo测试点)。 阅读详情

一 原题

Frame Up

Consider the following five picture frames shown on an 9 x 8 array:

........   ........   ........   ........   .CCC....
EEEEEE..   ........   ........   ..BBBB..   .C.C....
E....E..   DDDDDD..   ........   ..B..B..   .C.C....
E....E..   D....D..   ........   ..B..B..   .CCC....
E....E..   D....D..   ....AAAA   ..B..B..   ........
E....E..   D....D..   ....A..A   ..BBBB..   ........
E....E..   DDDDDD..   ....A..A   ........   ........
E....E..   ........   ....AAAA   ........   ........
EEEEEE..   ........   ........   ........   ........

   1          2           3          4          5

Now place all five picture frames on top of one another starting with 1 at the bottom and ending up with 5 on top. If any part of a frame covers another frame, it hides that part of the frame below. Viewing the stack of five frames we see the following.

           .CCC...
           ECBCBB..
           DCBCDB..
           DCCC.B..
           D.B.ABAA
           D.BBBB.A
           DDDDAD.A
           E...AAAA
           EEEEEE..

Given a picture like this, determine the order of the frames stacked from bottom to top.

Here are the rules for this challenge:

  • The width of the frame is always exactly 1 character and the sides are never shorter than 3 characters.
  • It is possible to see at least one part of each of the four sides of a frame. A corner is part of two sides.
  • The frames will be lettered with capital letters, and no two frames will be assigned the same letter.

PROGRAM NAME: frameup

INPUT FORMAT

Line 1:Two space-separated integers: the height H (3 <= H <=30) and the width W (3 <= W <= 30).
Line 2..H+1:H lines, each with a string W characters wide.

SAMPLE INPUT (file frameup.in)

9 8
.CCC....
ECBCBB..
DCBCDB..
DCCC.B..
D.B.ABAA
D.BBBB.A
DDDDAD.A
E...AAAA
EEEEEE..

OUTPUT FORMAT

Print the letters of the frames in the order they were stacked from bottom to top. If there are multiple possibilities for an ordering, list all such possibilities -- in alphabetical order -- on successive lines. There will always be at least one legal ordering.

SAMPLE OUTPUT (file frameup.out)

EDABC



二 分析

DFS,每次找当前未被其他字母覆盖的字母块。


三 代码

AC代码:
/*
ID:maxkibb3
LANG:C++
PROB:frameup
*/

#include<iostream>
#include<fstream>
#include<vector>
#include<set>
#include<cstring>
using namespace std;

const int MAX = 35;

int H, W;
string C[MAX];
int Border[26][4];  // u, d, l, r
int Num;
bool vis[26];
vector<int> ans;
set<string> re;

void init() {
    ifstream fin;
    fin.open("frameup.in");
    fin >> H >> W;
    for(int i = 0; i < 26; i++) {
        Border[i][0] = Border[i][2] = 30;
        Border[i][1] = Border[i][3] = -1;
    }
    for(int i = 0; i < H; i++) {
        fin >> C[i];
        for(int j = 0; j < W; j++) {
            if(C[i][j] == '.') continue;
            int idx = C[i][j] - 'A';
            if(i < Border[idx][0]) Border[idx][0] = i;
            if(i > Border[idx][1]) Border[idx][1] = i;
            if(j < Border[idx][2]) Border[idx][2] = j;
            if(j > Border[idx][3]) Border[idx][3] = j;
        }
    }
    for(int i = 0; i < 26; i++) {
        if(Border[i][1] != -1) Num++;
    }
}

bool check(int _idx) {
    char c = _idx + 'A';
    for(int i = Border[_idx][0]; i <= Border[_idx][1]; i++) {
        if(C[i][Border[_idx][2]] != c && C[i][Border[_idx][2]] != '*')
            return false;
        if(C[i][Border[_idx][3]] != c && C[i][Border[_idx][3]] != '*')
            return false;
    }
    for(int i = Border[_idx][2]; i <= Border[_idx][3]; i++) {
        if(C[Border[_idx][0]][i] != c && C[Border[_idx][0]][i] != '*')
            return false;
        if(C[Border[_idx][1]][i] != c && C[Border[_idx][1]][i] != '*')
            return false;
    }
    return true;
}

void dfs(int _depth) {
    if(_depth == Num) {
        string s = "";
        for(int i = ans.size() - 1; i >= 0; i--)
            s.append(1, (char)'A' + ans[i]);
        re.insert(s);
        return;
    }
    char Cc[MAX][MAX];
    for(int i = 0; i < 26; i++) {
        if(Border[i][1] == -1) continue;
        if(vis[i]) continue;
        if(check(i)) {
            for(int j = Border[i][0]; j <= Border[i][1]; j++) {
                Cc[j][Border[i][2]] = C[j][Border[i][2]];
                Cc[j][Border[i][3]] = C[j][Border[i][3]];
                C[j][Border[i][2]] = '*';
                C[j][Border[i][3]] = '*';
            }
            for(int j = Border[i][2] + 1; j < Border[i][3]; j++) {
                Cc[Border[i][0]][j] = C[Border[i][0]][j];
                Cc[Border[i][1]][j] = C[Border[i][1]][j];
                C[Border[i][0]][j] = '*';
                C[Border[i][1]][j] = '*';
            }
            ans.push_back(i);
            vis[i] = true;
            dfs(_depth + 1);
            vis[i] = false;
            ans.pop_back();
            for(int j = Border[i][0]; j <= Border[i][1]; j++) {
                C[j][Border[i][2]] = Cc[j][Border[i][2]];
                C[j][Border[i][3]] = Cc[j][Border[i][3]];
            }
            for(int j = Border[i][2] + 1; j < Border[i][3]; j++) {
                C[Border[i][0]][j] = Cc[Border[i][0]][j];
                C[Border[i][1]][j] = Cc[Border[i][1]][j];
            }
        }
    }
}

void solve() {
    ofstream fout;
    fout.open("frameup.out");
    dfs(0);
    for(set<string>::iterator it = re.begin(); it != re.end(); it++) {
        fout << *it << endl;
    }
}

int main() {
    init();
    solve();
    return 0;
}


Python GUI工具开发实战:TTC转TTF字体转换器(附完整代码) 本文详细介绍了如何使用Python开发一个GUI工具,实现TTC到TTF字体格式的转换。通过Tkinter构建用户界面,结合fontTools库处理字体转换,工具特别适用于国产操作系统环境下的字体兼容性问题解决。文章包含完整代码实现,帮助开发者快速掌握Python GUI开发与字体处理技术。 阅读详情

相关推荐

C++11——【USACO 4.4.3】——Frame Up

Frame Up Consider the following five picture frames shown on an 9 x 8 array: ........ ........ ........ ........ .CCC.... EEEEEE.. ........ ........ ..BBBB.. .C.C.... E....E..

McDonnell_Douglas的博客 440

usaco training 4.4.3 Frame Up 题解

序言:这道题的完结,预示着我的第四版旅程宣告结束!! 刚看到题目后,我就直接想到了类似于搜索的算法,每次去寻找”浮在最上面“的某个字母并继续搜索。但是我后来发现这样实现起来有点困难,因为没有特别的规划性。后来我就想到了拓扑。如果在某个字符A的边上找到了B,那么就从B向A连一条边。每次寻找入度为0的字母并释放该字母在其他字母上方的痕迹。 需要注意的是,输出时要把所有情况按字典序全部打印。因为拓扑与打印顺序相反,我本来以为拓扑时每次从Z枚举至A就会一定有序,后来发现有点问题。最后,我还是用了排序。

阿蒋的专栏 1857

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

【USACO题库】4.4.3 Frame Up重叠的图像

不太好复制,所以用截图 (直接用屏幕截图截的) 这题感觉不会很难,但为什么只有6个人做出来。。。 题意: 有若干个空心的长方形(宽度=1,边长≥3)叠在一起,已知最后的图形,求长方形叠放的顺序。 题解: 因为一个长方形有可能会被其它的长方形所覆盖一部分(不可能完全覆盖),所以我们先在读入时记录下每一个长方形左上角顶点的坐标和右下角顶点的坐标(找最大和最小

某司机的黑车 935

单片机入门说明书:从本质到架构,一文看透MCU核心原理

其实你每天用的洗衣机、刷的智能门锁、开的汽车里,都藏着它的身影。相当于工厂里的“运输轨道”,CPU算出的结果通过总线送到RAM存储,ROM里的程序通过总线传给CPU执行,外设的信号通过总线交给CPU处理,整个过程每秒能重复上百万次,确保各模块协同高效。高端单片机(比如STM32F4系列)还会配备DMA(直接存储器访问)单元,相当于“专用传送带”——不需要CPU干预,就能直接让外设和RAM之间传输数据(比如让ADC采集的温度数据直接存进RAM),大大降低CPU负担,让CPU能专注处理更重要的任务。

IAMIF12的博客 1038

从D触发器到8位SAR ADC:Cadence Virtuoso完整设计仿真指南

逐次逼近寄存器型模数转换器(SAR ADC)是混合信号集成电路中的基础架构,其核心是一个由D触发器构成的时序状态机。在数字电路设计中,D触发器常用于数据锁存、移位寄存和时钟分频,而在SAR ADC中,它恰好承担了节拍发生与结果寄存的双重角色。理解D触发器的工作机制,是掌握逐次逼近逻辑的关键前提。工程实践中,借助Cadence Virtuoso平台,可以从门级搭建SAR逻辑,并结合动态比较器与电荷重分配电容DAC,完成从原理图到瞬态仿真的全流程验证。通过FFT分析计算SNDR与ENOB,能够量化评估ADC的动

weixin_29178069的博客 285

【字符串-拓扑or爆搜】USA4.4——重叠的图像Frame Up

前言 这道题和上一题(追查坏牛奶)一样——非常超级无敌恶心难做QAQ!(其实是自己太弱) 从早上9点开始码代码、下午3点半开始交题到晚上AC...我现在已经神志恍惚... 很有趣的是,有一个数据长得很清奇,就像在你debug正心力憔悴的时候对你——竖了个中指(小别致长得真东西) 题目 题目描述 看下面的五张 9 x 8 的图像: ........ ........ .....

十里寒塘路♣烟花一半醒 425

【PLC】三菱plc控件安装 component Movedata had the following error ... Error Number:-119

Windows 10 专业版/企业版本版本号:22H2操作系统内部版本:19045.3448。

少莫千华 8001

USACO 4.4.3 Frame Up 重叠的图像 题解与分析

Frame Up 重叠的图像 译 by Felicia Crazy 描述 看下面的五张 9 x 8 的图像: ........ ........ ........ ........ .CCC.... EEEEEE.. ........ ........ ..BBBB.. .C.C.... E....E.. DDDDDD.. ....

初学者 1641

海康摄像头RTSP流延迟优化实战:从VLC到OpenCV的5种方案对比与性能调优

本文针对海康摄像头RTSP流的高延迟问题,深入剖析了延迟根源,并系统对比了从VLC、OpenCV到海康官方SDK、FFmpeg及硬件加速等五种主流方案的性能表现。重点分享了缓冲区设置、协议优化、多线程架构与硬件解码等实战调优技巧,旨在帮助开发者将视频流延迟从秒级优化至毫秒级,满足工业检测、安防监控等高实时性场景需求。

hh234的博客 804

ATGM332D模块串口配置保姆级教程:从9600波特率到NMEA数据过滤,一次搞定

本文提供ATGM332D模块串口配置的详细教程,涵盖从基础硬件连接到高级NMEA数据过滤的全过程。内容包括波特率优化、数据输出频率调整、NMEA语句过滤等实用技巧,帮助开发者快速掌握GNSS模块配置,提升定位系统性能。

weixin_30664051的博客 513

USACO4.4.3 Frame Up (frameup)

用1~26表示每种字母 统计每种字母的最小与最大的x与y坐标,这样就知道了每个矩形的边框。 从最上层开始dfs,找到当前所有边框上都是同样数字的矩形,则这个矩形一定是最上层的,继续dfs。 每次dfs找到一个矩形时,将该矩形的边框上的所有数字设为负数,负数可以看作是任何一种数字。回溯时再还原。 dfs到最后一层时记录答案,最后排序输出。/* ID:shijiey1 LANG:C++ PRO

Shion的专栏 578

论文必备 - YOLO26热力图可视化,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式

本文带来的是YOLO26热力图可视化功能,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如Centralized Feature Pyramid for Object Detection这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。在项目

Limiiiing的博客 431

Frame Up[USACO]

这道题没什么难度,开始看错了,以为要输出的是从上到下的顺序。我用的dfs,尝试把一个个矩形从当前图中拿出来,拿出来后将所在位置置为'*',在下次循环时需要恢复未拿走时的字符串。 /* ID: zhangyc1 LANG: C++ TASK: frameup */ #include <fstream> #include <iostream> #inc...

weixin_30270889的博客 312

【YOLOv8改进-注意力机制】BRA(bi-level routing attention ):双层路由注意力

【YOLOv8改进-注意力机制】BRA(bi-level routing attention ):双层路由注意力我们提出了一种新颖的动态稀疏注意力机制,通过双层路由实现更加灵活且具有内容感知的计算分配。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 3168

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

USACO 4.4 Frame Up(拓扑排序)

终于结束了第4章。。倒数第二个题,卡了2个月。。。 这个题,实现起来,还挺麻烦的,看懂题意,建好图,就是裸的拓扑排序了。 1 /* 2 ID:cuizhe 3 LANG: C++ 4 TASK: frameup 5 */ 6 #include <cstdio> 7 #include <cstring> 8 #i...

weixin_30571465的博客 499

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

USACO 4.4 Frame up Topological Sort

题目描述 看下面的五张 9 x 8 的图像: ........ ........ ........ ........ .CCC.... EEEEEE.. ........ ........ ..BBBB.. .C.C.... E....E.. DDDDDD.. ........ ..B..B.. .C.C.... E....E...

dianyi2475的博客 175

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

P2741 [USACO4.4] 重叠的图像 Frame Up

本文摘要:题目要求根据重叠后的9×8图像,反推出原始矩形(A-E)从下到上的堆叠顺序。每个矩形用大写字母表示,边宽为1且至少部分可见。算法核心是:1)提取各字母的边界坐标;2)从顶层开始识别,检查其边界的可见性;3)通过DFS递归处理剩余矩形,记录所有可能的堆叠顺序;4)按字典序输出结果。示例输入输出显示正确顺序为EDABC。代码实现了边界检测、可见性验证和深度优先搜索,确保在合理时间内找到所有解。

as673456的博客 547

usaco 4.4 Frame Up 2010.8.8

Frame Up   Consider the following five picture framesshown on an 9 x 8 array:   ........  ........   ........   ........  .CCC.... EEEEEE..  ........   ........   ..BBBB..  .C.C.... E....E..  D

Batman_的博客 895

Frame Up

题意:不想写,摘抄NOCOW翻译(http://www.nocow.cn/index.php/Translate:USACO/frameup) 描述 看下面的五张 9 x 8 的图像: ........ ........ ........ ........ .CCC.... EEEEEE.. ........ ........ ..BBBB.. .

原味 616

Frame Up_usaco 4.4_拓扑排序

Description看下面的五张 9 x 8 的图像: 现在,把这些图像按照 1—5 的编号从下到上重叠,第 1 张在最下面,第 5 张在最顶端。如果一张图像覆盖了另外一张图像,那么底下的图像的一部分就变得不可见了。我们得到下面的图像: 对于这样一张图像,计算构成这张图像的矩形图像从底部到顶端堆叠的顺序。 下面是这道题目的规则: • 矩形的边的宽度为 1 ,每条边的

olahiuj的博客 755

USACO Section 4.4 Frame Up - DFS即可~

无敌大水题一道...只可惜我太粗心了送了3次WA和1次爆数组才给过...囧..开始题目看错了...题目是要求出所有的涂色方案...并且按字典序输出..一种方案输出一行~~     数据范围很小阿..整个图也就30*30...所出现的也就A-Z的26个大写字母..而且还没有重复...为了方便搜索..我在开始就记录好了A-Z矩形方框的X,Y最大值和最小值~~也就是定位好了每个框框...然后就一个个枚

zzyzzy12 1310

USACO SECTION 4.4 Frame Up

Frame Up Consider the following five picture frames shown on an 9 x 8 array: ........ ........ ........ ........ .CCC.... EEEEEE.. ........ ........ ..BBBB.. .C.C.... E....E.. D

126

【拓扑排序】洛谷 - P2741 [USACO4.4] 重叠的图像Frame Up

拓扑排序好好好题

TengMaxJun的博客 552

USACO 4.4 Frame Up(拓扑排序,全部解)

2015-03-2516:21:58 思路:题意是给出若干(<=26)个矩形框,而且这个框只有最外面的一圈,根据将他们堆叠后的俯视图像来推断这些框的堆叠方式。字典序输出所有可能。   首先,题目保证根据俯视图你能确定每个矩形框的边长,那么我们开up,down,left,right四个数组来记录每个字母的最上/下/左/右的坐标,这样就可以确定矩形框的方位了。   考虑用拓扑排...

dingdi3021的博客 198
上一篇: usaco4.4.1 Shuttle Puzzle
下一篇: usaco5.1.1 Fencing the Cows
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值