[ ZOJ 1043 ][ POJ 1108 ] Split Windows

深入解析TMC2209 UART寄存器配置:从基础指令到高级参数调优 本文深入解析TMC2209 UART寄存器配置,从基础指令到高级参数调优,涵盖电流控制、微步细分等关键设置。通过实战案例和优化技巧,帮助开发者高效配置步进电机驱动,提升系统性能和稳定性。特别介绍了UART通信协议和CRC校验实现,确保数据传输可靠性。 阅读详情

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1043

POJ: http://poj.org/problem?id=1108


题目大意:(图见原题)

每一个无分割的窗口有一个大写字母标签。每个窗口左上角有大写字母标签,其他三个角有*号,上下边界用-,左右边界用|表示。

每个窗口分割可以用一颗二叉树表示,表示方式如下:

1、无分割的窗口用大写字母表示
2、有再分的窗口对应的二叉树根为-(横分割)或者|(竖分割),左右子树分别是上下或者左右子窗口

二叉树用先序遍历的方式描述。

每个为分割的窗口里头必须有至少放一个字母的空间存在,所以每一种窗口分割情况都有对应的最小窗口大小。

考虑Tree4和Window4。主窗口分为左右两边,分别是Tree2和Tree3。左窗口和Window2一致,右边窗口的高度拉伸至与左边一致。窗口的拉伸规则取决于如何定义窗口的尺寸。尺寸计算时很容易想象窗口包含其内部和每个边界上半个字符的大小,所以整个窗口的尺寸比内部大小多一个单位。所以最小的窗口尺寸是2*2,1个单位是内部,1个单位是边界引入的尺寸增加。从这个定义可以知道一个窗口的宽度是左右子窗口宽度之和,高度是上下子窗口的高度和。

Window4的右窗口需要拉伸至高度为10。右窗口分为上子窗口P(最小高度2)和下子串口|Q|RST(最小高度4)。窗口的拉伸规则:如果可能的话,拉伸后各子窗口的高度与其最小高度成比例。例如此窗口需要拉伸到高度D=10,我们需要决定上下子窗口的高度D1和D2。最小总高度d=6,上下子窗口最小高度d1=2,d2=4。D1 = d1*(D/d) = 2*(10/6) = 3.333...and D2 = d2*(D/d) = 6.666....结果调整成整数为4和6。

类似地,可以计算 -|Q|RST这个窗口。这个窗口又分为上下两部分,分别为|Q|RS和T,它们的最小高度d1=d2=2。高度要拉伸至D=6,所以D1 = D2 = 2*(6/4) = 3 (正好是整数)。

窗口的总体积总是在子窗口体积之前决定的。在这个例子中,只有高度需要分配。但是如果水平和垂直的分割是相互交叉的,例如最后一个样例,那么宽度也需要分配。如果分配计算时得到的结果不是整数,让上面的子窗口或者左边子窗口的尺寸取计算结果的上整。


输入:

第一行为数据规模,整数。之后每一行是窗口对应二叉树的先序遍历,只包含|,-和26个大写字母。



输出:

最每组数据输出编号和窗口。


解题思路:

从叶子开始建立窗口,从下往上合并、拉伸。

最早的思路是每次建立的时候就用字符串把窗口的表示存储下来,但是这样由于拉伸操作是递归的,需要对二叉树每个叶子节点都存放窗口的字符表示,要占用很大的空间,且拉伸操作的时候处理字符串也很麻烦。

然后想到其实只要对二叉树每个结点存储一下对应窗口的长和宽就可以了,再存储一下分割状态:UP(UpDown, define as -1), LR(LeftRight, define as -2)和字母(不再分割的话这个小窗口有对应的字母标签)

数据结构:

typedef struct node
{
    int w, h;           //width height
    int type;           //split type
    int lson, rson;
}node;

先递归计算窗口的大小和每个子窗口的大小(合并左右子树对应窗口的时候根据分割情况可能要进行长或宽上的拉伸)。再根据计算的大小生成窗口的字符串形式,输出。


源代码:

“狗狗搞完40题”中他的代码只有100行,而我居然写了200行……不排除我每个 { 都要新起一行占用了不少行数,不过我很多地方确实写得很水哎……

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define UD -1
#define LR -2
#define maxn 256
#define maxlen 1024
const double EPS = 1e-2;

typedef struct node
{
    int w, h;           //width height
    int type;           //split type
    int lson, rson;
}node;

node win[maxn];
char str[maxlen][maxlen];

bool isletter(char x)
{
    //if (x>='A' && x<='Z') return true;
////    return false;
    if (x!='-' && x!='|') return true;
    return false;
}

void streach_w(int k, int w)
{
    win[k].w = w;
    if (win[k].type>=0) return;
    else if (win[k].type==UD)
    {
        streach_w(win[k].lson, w);
        streach_w(win[k].rson, w);
    }
    else
    {
        int w1 = (int)(ceil(1.0*w*win[win[k].lson].w/(win[win[k].lson].w+win[win[k].rson].w))+EPS);
        streach_w(win[k].lson, w1);
        streach_w(win[k].rson, w-w1);
        win[k].w=w;
    }
}

void streach_h(int k, int h)
{
    win[k].h = h;
    if (win[k].type>=0) return;
    else if (win[k].type==LR)
    {
        streach_h(win[k].lson, h);
        streach_h(win[k].rson, h);
    }
    else
    {
        int h1 = (int)(ceil(1.0*h*win[win[k].lson].h/(win[win[k].lson].h+win[win[k].rson].h))+EPS);
        streach_h(win[k].lson, h1);
        streach_h(win[k].rson, h-h1);
    }
}

void print(int w, int h, char str[][maxlen])
{
    for (int i=0; i<=h; i++)
    {
        for (int j=0; j<=w; j++)
            printf("%c", str[i][j]);
        printf("\n");
    }
}

void clear(int h, int w, char str[][maxlen])
{
    for (int j=0; j<=w; j++)
        str[0][j] = str[h][j] = '-';
    for (int i=0; i<=h; i++)
        str[i][0] = str[i][w] = '|';
    str[0][0] = str[0][w] = str[h][0] = str[h][w] = '*';
    for (int i=1; i<h; i++)
        for (int j=1; j<w; j++)
            str[i][j]=' ';
}

void cre_window(int k, int line1, int line2, int col1, int col2, char str[][maxlen])
{
    if (win[k].type>=0)
    {
        str[line1][col1] = win[k].type + 'A';
        return;
    }
    else if (win[k].type==UD)
    {
        int line = line1 + win[win[k].lson].h;
        for (int i=col1+1; i<col2; i++)
            str[line][i] = '-';
        str[line][col1] = str[line][col2] = '*';
        cre_window(win[k].lson, line1, line, col1, col2, str);
        cre_window(win[k].rson, line, line2, col1, col2, str);
    }
    else  //left and right
    {
        int col = col1 + win[win[k].lson].w;
        for (int i=line1+1; i<line2; i++)
            str[i][col] = '|';
        str[line1][col] = str[line2][col] = '*';
        cre_window(win[k].lson, line1, line2, col1, col, str);
        cre_window(win[k].rson, line1, line2, col, col2, str);
    }
}

int cal_size(int k, int l, int &sum, char tree[])
{
//    printf("k=%d l=%d r=%d tree[l]=%c \n", k, l, r, tree[l]);
    if (isletter(tree[l]))
    {
        win[k].w = win[k].h = 2;
        win[k].lson = win[k].rson = -1;
        win[k].type = tree[l]-'A';
//printf("    k=%2d w=%2d h=%2d type=%c\n", k, win[k].w, win[k].h, win[k].type+'A');
//printf("        lson=%2d rson=%2d\n", win[k].lson, win[k].rson);
        if (k==0)
        {
            clear(win[0].h, win[0].w, str);
            cre_window(0, 0, win[0].h, 0, win[0].w, str);
            print(win[0].w, win[0].h, str);
        }
        return l;
    }
    else{
        int tmp;
        win[k].lson = ++sum;
            tmp = cal_size(win[k].lson, l+1, sum, tree);
        win[k].rson = ++sum;
            tmp = cal_size(win[k].rson, tmp+1, sum, tree);
        win[k].type = (tree[l]=='-') ? UD : LR;
        if (win[k].type==UD)             //up and down should have the same width
        {
            if (win[win[k].lson].w!=win[win[k].rson].w)
            {
                if (win[win[k].lson].w > win[win[k].rson].w)
                {
                    win[k].w = win[win[k].lson].w;
                    streach_w(win[k].rson, win[k].w);
                }
                else
                {
                    win[k].w = win[win[k].rson].w;
                    streach_w(win[k].lson, win[k].w);
                }
            }
            else win[k].w = win[win[k].lson].w;
            win[k].h = win[win[k].lson].h + win[win[k].rson].h;
//printf("    k=%2d w=%2d h=%2d type=-\n", k, win[k].w, win[k].h);
//printf("        lson=%2d rson=%2d\n", win[k].lson, win[k].rson);
            if (k==0)
            {
                clear(win[0].h, win[0].w, str);
                cre_window(0, 0, win[0].h, 0, win[0].w, str);
                print(win[0].w, win[0].h, str);
            }
            return tmp;
        }//(win[k].type==LR)
        else                            //left and right should have the same height
        {
            if (win[win[k].lson].h!=win[win[k].rson].h)
            {
                if (win[win[k].lson].h > win[win[k].rson].h)
                {
                    win[k].h = win[win[k].lson].h;
                    streach_h(win[k].rson, win[k].h);
                }
                else
                {
                    win[k].h = win[win[k].rson].h;
                    streach_h(win[k].lson, win[k].h);
                }
            }
            else win[k].h = win[win[k].lson].h;
            win[k].w = win[win[k].lson].w + win[win[k].rson].w;
//printf("    k=%2d w=%2d h=%2d type=|\n", k, win[k].w, win[k].h);
//printf("        lson=%2d rson=%2d\n", win[k].lson, win[k].rson);
            if (k==0)
            {
                clear(win[0].h, win[0].w, str);
                cre_window(0, 0, win[0].h, 0, win[0].w, str);
                print(win[0].w, win[0].h, str);
            }
            return tmp;
        }//(win[k].type=LR)return tmp;
    }
    return -1;
}



int main(){
    int cs, sum;
    char tree[maxlen];
    node win[maxn];
    scanf("%d", &cs);
    for (int cases=1; cases<=cs; cases++)
    {
        sum=0;
        scanf("%s", tree);
        printf("%d\n", cases);
        cal_size(0, 0, sum, tree);
    }
    return 0;
}


【图像超分】论文复现:CVPR 2024 | 轻量化超分 | 窗口注意力改进 | CAMixerSR的Pytorch源码复现,跑通源码,获得指标和超分结果,计算复杂度,架构梳理拆解,逐行注释! 本文介绍了超分辨率重建方法CAMixerSR的代码实现与运行指南。文章亮点包括:完整跑通源码获取PSNR/SSIM指标和可视化结果;详细解析模型架构与关键代码注释,帮助快速复现基线模型。实验部分提供了测试配置文件和训练设置说明,支持2K/4K/8K大图像超分和x2/x4轻量化超分。环境依赖PyTorch和BasicSR框架,数据集包含DIV2K等常用基准。测试结果与论文指标一致,可视化输出保存至指定目录。训练配置可自定义数据集路径、GPU数量等参数。该实现突出了CAMixerSR在降低W-MSA复杂度方面的 阅读详情

相关推荐

liquibase扩展支持达梦数据库

近期项目中需要支持国产数据库,需要liquibase底层支持达梦数据库,记录下操作的详细步骤以便分享。 1.liquibase支持的数据库很多如MySQL, PostgreSQL, Oracle, Sql Server, DB2。但是达梦数据库并不支持,所以需要新建DMDatabase类来适配达梦数据库。达梦语法和Oracle很像所以只需要复制liquibase-core下的Oracle Database做些修改就可了。以下为需要修改的地方 public class DMDatabase extends A

qq_43677719的博客 5472

ACM 各大OJ平台以及题目分类

Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 程序:   一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转

偏执 1万+

Kisssoft软件在行星齿轮设计上的初试

行星齿轮传动与链传动相比较,具有质量小,体积小,承载能力强,传动比大,传动效率高等优点,但在行星齿轮传动种种优点下,不可避免的带来一些缺点,对其材料的要求过高,在追求传动比大而体积小的同时,其传动结构大大的复杂化,以及在制造和安装过程中较困难,对于行星齿轮传动设计来说,不仅应该了解其优点,而且应该在设计中,充分发挥其优点,且把其缺点降低到最低的限度。从而才能设计出性能优良的行星齿轮传动装置,为我们赛车提供更加强大的动力保证。 Kisssoft软件为我们行星齿轮传动设计提供了一体化方案,从设...

m0_69808569的博客 1万+

POJ 1108 Split Windows

现在的我还是太菜了,这道题弄了一天还没有解出来,不过已经完成70%了,剩下的留给未来成为大神的我吧- -. 2016.05.04

Stay hungry... 366

Python与PyCharm安装配置教程:从零搭建开发环境

编程入门的第一步是搭建开发环境,而Python解释器与IDE工具的选择常让新手困惑。Python作为解释型语言,负责将代码翻译为机器指令,而PyCharm作为集成开发环境,提供代码编辑、调试与项目管理功能,两者协同工作构成高效开发基础。环境变量PATH的配置是安装过程中的关键环节,正确处理可避免“python不是内部或外部命令”的常见错误。理解pip包管理机制,则能轻松安装第三方库并管理项目依赖。从下载官方安装包到运行第一个Hello World程序,再到利用虚拟环境隔离应用依赖,这套流程适用于Window

benben 683

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

POJ 1108 食物链 并查集 + 向量偏移

POJ 1108 向量偏移 先贴在这里,回去看看。 #include using namespace std; int p[50005], r[50005]; int n, d, k; int found(int x) { if(x == p[x]) return x; int t = p[x]; p[x] = found(t); r[x

Rocking_Bee's Blog 639

Winform中使用EasyPlayer-RTSP-Win开源组件实现播放RTSP视频流

场景 开源RTMP组件EasyPusher-Android+EasyDarwin实现APP推流给RTSP流媒体服务器: 开源RTMP组件EasyPusher-Android+EasyDarwin实现APP推流给RTSP流媒体服务器_BADAO_LIUMANG_QIZHI的博客-优快云博客 上面介绍了RTSP相关的开源组件,如果要在Windows中实现对RTSP视频流的播放, 可以使用开源组件EasyPlayer-RTSP-Win GitHub - tsingsee/EasyPlayer-RTSP

BADAO_LIUMANG_QIZHI的博客 1万+

ZOJ 1108 FatMouse's Speed

        给定N组数据,每组包含老鼠的体重和速度,你需要找出最长的序列S,使其满足重量严格递增,速度严格递减。很显眼用最长**子序列的方法做。但是这个题需要排序,先对重量排,再对重量相同的排速度,麻烦,不过在网上学会了方法。这次我还学会了系统qsort的用法,知道怎样自己比较函数。waka waka!~        做出这个我兴奋得跳了起来。。。。小有成就感。。。。#include #include struct mouse { int weight; int speed;

闷瓜蛋子的专栏 1610

车载以太网-TC8测试

TC8测试的用例数量 TC8测试基本流程 TC8测试内容

天赐好车的博客 3615

C# & SQL Server 实时数据同步:7步轻松搞定,代码详解

实时数据同步是指在一个数据库中的数据发生变化时,能够立即或近乎立即地将这些变化同步到另一个数据库中。这种同步可以是单向的(从源数据库同步到目标数据库),也可以是双向的(两个数据库互相同步)。通过本文的详细讲解和代码示例,相信你已经学会了如何使用C#和SQL Server实现数据库的实时数据同步。实时数据同步不仅可以提升系统的响应速度,还能确保数据的一致性和准确性。希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!🌟✨如果你有任何问题或建议,欢迎在评论区留言交流!

java专栏 514

ZOJ 1108 FatMouse's Speed 动态规划

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=108 题目大意:证明老鼠重量越重,速度越慢,给你一组老鼠的数据(包括重量和速度),要求输出满足前面条件的最长的子序列的老鼠编号 首先,按照老鼠的重量进行升序和速度的降序排列; 然后,根据动态方程求解 len[0]=1;len[i]=max{len[j]...

344

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 992

ZOJ 1108(FatMouse's Speed)

//经典dp //难点在于序列路径的输出(使用“前驱法”) #include #include using namespace std; int dp[1001], pre[1001]; struct mice { int order; //记住初始时各只老鼠的顺序,避免后面操作时打乱 int weight; int speed; }m[1001]; bool cmp(mice &m1

WuchangI的博客 799

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HDU1043:Eigth(康托展开)

Problem Description   The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to

ACM!荣耀之路! 3046

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

poj完整分类

DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  1027   Human Gene Functions   简单题  1037   Gridland            简单题  1052   Algernon s Noxious

zhongkeli的专栏 7874

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Poj 1108

简单数论题,求最小公倍数。 最小公倍数 = a * b/gcd(a,b);//gcd(a,b):最大公约数import java.util.Scanner;public class Main { //最大公约数 public static int gcd(int a,int b){ if(b == 0) return a; return gcd(b,

wind14的博客 405

[ZOJ1413][POJ1021] 2D Nim 非人品解法

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1413POJ: http://poj.org/problem?id=1021题目大意:其实和Nim问题是没有关系的。给出两个玩2D-Nim游戏的棋

Dango's happy life 1570

[ZOJ1144][POJ1104] Robbery

ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1144POJ:http://poj.org/problem?id=1104题目大意:有大盗光顾了一个W*H的矩形城市。给出一些信息,t时刻大盗不在矩

Dango's happy life 1400

[ZOJ1462][POJ1112] Team Them Up!

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=462POJ: http://poj.org/problem?id=1112题目大意:把一些人分成两组,每一组中的人满足任意两个人都相互认识,且要求两组

Dango's happy life 1265

[ZOJ 1116 ] [ POJ 1911 ] A Well-Formed Problem

ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1116题目大意:(对XML没有了解,只是按照字面意思理解了一下题意)与这样有起始结束声明的,name称为tag是empty el

Dango's happy life 1233

[ZOJ1021] The Willy Memorial Program

【题目大意】有一些竖直的圆筒状管子,管子间有理想的水平细管相连。一只蜘蛛停在某跟管子的某个高度上,从第一根管子往系统注水,问前往营救的老鼠有多长时间可以关闭热水阀门。    最终抽象为当水上升到指定位置的时候系统中的总水柱高度。 【解题思路】 AC思路:(参考“狗狗40题搞完纪念“)从第一根管子开始注水,采用优先队列的方式每次选取可注水且纵坐标最大(最低)的地方进行注水。若中途出现溢出现象,则永远

Dango's happy life 1190

[ZOJ1518][POJ1291] This Sentence is False

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1518POJ: http://poj.org/problem?id=1291题目大意:有n个句子,编号为1..n,为Sentence XXX is

Dango's happy life 1176

[ZOJ1391][POJ1436] Horizontally Visible Segments

题目大意:若两条竖直线段之间可以连一条水平线,这条水平线不与其他竖直线段相交,称这两条竖直线段为“相互可见”的。若存在三条竖直线段,两两”相互可见“,则构成”线段三角形“。给出一些竖直的线段,问一共有多少”线段三角形“解题思路:这道题在刘汝佳的黑书里有解题思路的指导,在图论部分出

Dango's happy life 1134

[ZOJ1301][POJ1137] The New Villa

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1301POJ: http://poj.org/problem?id=1137题目大意:每个房间的开关经常是控制别的房间的灯的。

Dango's happy life 1089

[ ZOJ 1197 ] [POJ 1486] Sorting Slides

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1197 POJ: http://poj.org/problem?id=1486 题目大意: 有一些透明的幻灯片乱放成一大堆。

Dango's happy life 1050
上一篇: [ZOJ 1387] [POJ 1432] Decoding Morse Sequences
下一篇: [ZOJ 1116 ] [ POJ 1911 ] A Well-Formed Problem
program_shun
博客等级 码龄17年 10粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值