同机房大佬也写了这道题的 题解.

我在另一篇 题解 中提到了这类问题的通解,接下来我们依照此通解思考该题.

问题处理

首先我们来定义三角形的表示方式. 定义 \(f[i][j]\) 表示三角形 \((i,j)\) 的最大边长,其中三角形 \((i,j)\) 为垂直顶点坐标为 \((i,j)\) 的三角形. (垂直顶点指正下方顶点或正下方顶点)

进行初始化:使所有完好的蛋糕块所在坐标的最大边长都为 \(1\) .

然后进行状态转移方程的推理:

为了坐标便于表示,我们先把蛋糕左对齐,如图.

101100001
0000010
00010
010
0
101100001
0000010
00010
010
0

再放一个比较直观的图:

对应着来看,我们发现,正三角和倒三角的处理方式是不同的,所以我们一个一个解决.

先来看倒三角,也就是它的顶点在最上方. 我们发现,要想使边长从 \(1\) 变为 \(2\) ,需要这个三角形的正上方,左上方,右上方都是完好的. 左对齐来看,需要完好的就是正上方,右上方和更右边的一个.

注意到这个图中有一个边长为 \(3\) 的倒三角形,那么我们如何从 \(2\) 变为 \(3\) 呢? 依照刚才的思路,我们发现只需要保证此三角形和它上方的三角形完好,并且它左上方,右上方的三角形的最大边长都为 \(2\) . 也就是下图这样.

标蓝的为最大长度为 \(2\) 的三角形,标红的为需要完好的三角形.

发现一定理:假如一个三角形和它上方的三角形都完好,且左上方,右上方的三角形均不大于 \(n\),那么这个三角形的最大边长为\(n+1\).

由此,对应左对齐坐标,推出状态转移方程:

\[f[i][j] = min\begin{cases} f[i-1][j]\\f[i-1][j+2]) \end{cases}+1
\]

同理,正三角的状态转移方程为:

\[f[i][j] = min\begin{cases} f[i+1][j]\\f[i+1][j-2]) \end{cases}+1
\]

找出最大值即可

另外. 如何判断一个三角形是正三角还是倒三角呢? 其实也很简单:顶点是正三角的三角形就是正三角. 而我们左对齐的意义就出现了:可以发现,奇数列的顶点全是倒三角,偶数列的顶点全是正三角,所以遍历的时候直接遍历所有奇数列或偶数列即可.

细节处理

注意到:第一行的顶点无法构成倒三角,最后一行的顶点无法构成正三角,第二列的顶点无法构成正三角. 遍历的时候直接跳过即可.

代码实现

点击查看代码
	cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=(n-i)*2+1;++j){
scanf("%1d",&f1[i][j]);
f2[i][j]=f1[i][j]=!f1[i][j];
}
}
for(int k=1;k<=2;++k){
for(int i=2;i<=n;++i){
for(int j=1;j<=(n-i)*2+1;j+=2){
if(f1[i][j]&&f1[i-1][j+1]){
f1[i][j]=min(f1[i-1][j],f1[i-1][j+2])+1;
ans=max(ans,f1[i][j]);
}
}
}
for(int i=1;i<=n-1;++i){
for(int j=4;j<=(n-i)*2+1;j+=2){
if(f2[i][j]&&f2[i+1][j-1]){
f2[i][j]=min(f2[i+1][j],f2[i+1][j-2])+1;
ans=max(ans,f2[i][j]);
}
}
}
}
cout<<ans*ans;

[TK] 三角蛋糕 hzoi-tg#261的更多相关文章

  1. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...

  2. 使用mybatis-generator插件结合tk.mybatis自动生成mapper

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  3. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  4. Guass列选主元消去法和三角分解法

    最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下: 1.Guass列选主元消去法对于AX =B 1).消元过程:将(A|B)进行变换为,其中是上三角矩阵.即: k从1到n-1 ...

  5. import matplolib 时出现"This probably means that tk wasn't installed properly."的解决方法

    最近又添了一台新电脑,配置好各个依赖环境后想用matplotlib画个图,结果报出下面的错误 根据报错分析,应该是C:/Python27/tcl/tk8.5/tk.tcl这个文件出问题了,根据图中的信 ...

  6. 如何把select默认的小三角替换成自己的图片

    不同的浏览器默认的select的选项图标是不同的,例如: 在chrome中,是这样的: 未点击时    点击时  在Firefox中是这样的: 未点击时  点击时   在IE9中是这样的: 未点击时  ...

  7. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  8. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  9. CSS实现小三角小技巧

    <style> .box{ width: 20px; height: 20px; background-color: #424; border: 10px solid #9C27B0; b ...

  10. 输出 n=6 的三角数字阵(JAVA基础回顾)

    package itcast.feng; import java.util.Scanner; //需求:输出 n=6 的三角数字阵 //1 //2 3 //4 5 6 //7 8 9 10 //11 ...

随机推荐

  1. 第三节 JMeter安装及配置

    1.官网地址下载 (1)JDK:https://www.oracle.com/cn/java/technologies/downloads/,下载1.8版本以上的,最好下载最新版本(本次下载本次下载了 ...

  2. SMU Summer 2024 Contest Round 2 (7.9)zhaosang

    A-A http://162.14.124.219/contest/1006/problem/A 考查用vector画图 我枚举到n==5才开始用,浪费40分钟,还是找规律太慢,得多学 做题代码如下: ...

  3. Java SE 文件上传和文件下载的底层原理

    1. Java SE 文件上传和文件下载的底层原理 @ 目录 1. Java SE 文件上传和文件下载的底层原理 2. 文件上传 2.1 文件上传应用实例 2.2 文件上传注意事项和细节 3. 文件下 ...

  4. windows server dhcp与AD域

    创建两台windows server 2016 同一个网络适配器 windows1 配置window1手动网络 安装域 设置密码下一步下一步 重启 完成域安装后创建用户 配置windows1 dhcp ...

  5. web3的的入口,钱包,为什么说加密钱包是Web 3活动入口

    Web3.0让未来充满了想象力,或许超越当今人类所知的互联网.有可能彻底改变人类社交互动.商业往来和整个互联网经济.同时数字加密货币行业从业者对Web 3.0赋予了很高期待,希望通过结合后打破互联网巨 ...

  6. 【SpringBoot】日志在项目中的应用

    日志的目的: 为了方便日后的运维,快速定位BUG,错误信息等等 日志算是一个救命稻草 pom.xml需要的依赖: <?xml version="1.0" encoding=& ...

  7. 【转载】 【报错】ImportError: cannot import name 'downsample' —— lasagne模块 调用 theano 报错

    原网址: https://blog.csdn.net/kz_java/article/details/125030733 ======================================= ...

  8. [COCI 2023/2024 #2] Zatopljenje 题解

    UPDATE on 2024.4.25 改掉奇怪压行码风,并稍作排版. 前言 题目链接:洛谷. 题目分析 首先发现区间中的个数等于 \(\texttt{高度大于 x 的位置的个数} - \texttt ...

  9. 【简单菊花图】Codeforce 1583Problem - B.md

    1583Problem - B - Codeforces 题目大意:n个点的无根树 给出m个限制条件 (a,c,b)在a到b路径上不能存在c点,求任意一种可能的树的所有边 注意数据范围:1<m& ...

  10. 在Debian上安装freeswitch

    在Debian上安装freeswitch 说明: 首次发表日期:2024-08-12 参考文档: https://medium.com/@jogikrunal9477/ultimate-guide-t ...