AcWing 5180. 正方形泳池

news/2024/5/18 23:03:32 标签: 算法, 枚举, c++, 数据结构


原题链接:5180. 正方形泳池 - AcWing题库

说实话题解和视频题解都不太好,有点过于复杂了,那就不得不记录一下我看视频题解衍生出的另一个较为简单的思路了。

根据答案形态出发,枚举所有这种形态找出最大值。

可以发现最大的泳池要么是左右边界被两棵树限制住了,或者就是上下边界被两棵树限制住了。
所以我们可以穷举所有两棵树的组合,并且以这两棵树y的差值或者x的差值为正方形的边长,来放下泳池。最大的泳池,必然在这些组合里面。

放下泳池有限制条件,假设以y的差值放下去,那么可用的连续x也必须大于等于y的差值,两棵树之间可能会有其他树来碍事,那么这里的x就会被断开成好几段,需要找出最大的那个x。

这种只有一棵树的,因为泳池不能超过边界,所以相当于外面围了一圈树,只要在四个角落种上树就好了。

AC代码

#include <bits/stdc++.h>
using namespace std;

int N,T,ans=INT_MIN;
struct tree{
    int x,y;
}t[105];
vector<int>tmp;
bool cmpy(tree a,tree b){
    return a.y<b.y;
}
bool cmpx(tree a,tree b){
    return a.x<b.x;
}

int main(){
    cin>>N>>T;
    for(int i=1;i<=T;++i)
        cin>>t[i].x>>t[i].y;

    t[++T]={0,0};
    t[++T]={0,N+1};
    t[++T]={N+1,0};
    t[++T]={N+1,N+1};

    sort(t+1,t+1+T,cmpy);
    for(int i=1;i<=T;++i){
        for(int j=i+1;j<=T;++j){
            tmp.push_back(0);
            tmp.push_back(N+1);
            for(int k=i+1;k<j;++k)
                tmp.push_back(t[k].x);

            sort(tmp.begin(),tmp.end());
            int xmax=INT_MIN;
            for(int k=0;k<tmp.size()-1;++k)
                xmax=max(xmax,tmp[k+1]-tmp[k]-1);
            ans=max(ans,min(xmax,t[j].y-t[i].y-1));
            tmp.clear();
        }
    }

    sort(t+1,t+1+T,cmpx);
    for(int i=1;i<=T;++i){
        for(int j=i+1;j<=T;++j){
            tmp.push_back(0);
            tmp.push_back(N+1);
            for(int k=i+1;k<j;++k)
                tmp.push_back(t[k].y);

            sort(tmp.begin(),tmp.end());
            int ymax=INT_MIN;
            for(int k=0;k<tmp.size()-1;++k)
                ymax=max(ymax,tmp[k+1]-tmp[k]-1);
            ans=max(ans,min(ymax,t[j].x-t[i].x-1));
            tmp.clear();
        }
    }

    cout<<ans<<endl;
    return 0;
}

思路很简单,但是说也不太说的明白。

重点:枚举所有答案形态。


http://www.niftyadmin.cn/n/5097448.html

相关文章

8.12 PowerBI系列之DAX函数专题-分组内动态TopN和others

需求 实现 1 度量值 total amount2 var v_total calculate([total amount],removefilters(productnames[])) // return if(isinscope(productnames[产品名称]),//第一个参数//下面部分为if的第二个参数&#xff0c;是一整段的DAX表达式var v_Topn_no [topN参数 值] //获取当…

新产品发布新闻稿推广文案怎么写?纯干货

一篇优质的新闻稿传播速度是非常快的&#xff0c;可以让产品获得大量曝光和展现&#xff0c;提高产品的知名度和口碑&#xff0c;这样的稿件撰写起来是需要掌握一定的技巧的&#xff0c;新产品发布新闻稿推广文案怎么写&#xff1f;伯乐网络传媒十多年文案撰写经验&#xff0c;…

FL Studio 2023中文安装设置指南!四招教你玩转FL Studio21!

Fl Studio是一款极具时尚元素的音乐制作软件&#xff0c;对于粉丝群体来说简直是一大福利&#xff01;不仅可以充分发挥你的创造力&#xff0c;还能展现你的音乐才华。这里给你分享几个设置中文的技巧&#xff0c;让你的Fl Studio体验更上一层楼&#xff01; 编曲软件FL Studi…

扫雷游戏源码解析:构建你自己的MineSweeper

大家好&#xff0c;我自己编写了一款扫雷游戏&#xff0c;并决定将其开源。在这个项目中&#xff0c;您可以体验初级、中级和高级难度的游戏模式&#xff0c;适合各种游戏水平。如果您热爱扫雷或对编程有兴趣&#xff0c;这个项目一定会吸引您。 项目亮点&#xff1a; 三种难度…

【Python第三方包】ocr文字识别(pyocr)

文章目录 前言一、ocr 安装1.1安装pyocr1.2 安装ocr引擎为什么需要安装ocr引擎安装ocr引擎(Ubuntu演示)安装中文引擎二、如何去使用ocr2.1 导入相关的包2.2 初始化ocr2.3 打开指定的图片文件2.4 使用OCR工具进行文本识别2.5 输出最后的文本2.6 代码预览三、后期代码实践总结前言…

2023.10(u盘刻录iso)主机,vmware,virtualbox安装linux/ubuntu/kali

download 1 kali官网 2 ubuntu官网 3vmware workstation pro(最新版17pro) 4 virtualbox for linux sudo apt install virtualbox-ext-pack 5 win32 disk imger linux dd 刻录iso到u盘 #查看U盘路径 fdisk -l #图形界面 以kali为例会在桌面出现挂载图标 点开之后输入pwd寻…

有消息称苹果Vision Pro会有廉价版

据外媒爆料&#xff0c;苹果公司苹果正在研发的头显产品Vision Pro&#xff0c;将会有廉价版。据透露&#xff0c;这款产品预计售价在1500美元至2500美元之间&#xff0c;虽然仍不算低&#xff0c;但较现有的Vision Pro 3499美元的起售价&#xff0c;还是有明显降低。 透露廉价…

《进化优化》第5章 进化规划

文章目录 5.1 连续进化规划5.2 有限状态机优化5.3 离散进化规划5.4 囚徒困境5.5 人工蚂蚁问题 5.1 连续进化规划 目的&#xff1a;最小化f(x)&#xff0c; 这里的x是一个n维向量&#xff0c;假定对所有的x, f(x)>0。 进化规划从随机生成的一个个体种群{xi}开始, 按如下方式…