题解:P12630 [ICPC 2025 NAC] SLA Tomography
题解
P12630 [ICPC 2025 NAC] SLA Tomography
题目传送门
题目描述
立体光刻(SLA)是一种 3D 打印技术,通过激光逐层将液态材料固化成固体物体。在本问题中,我们将考虑 SLA 的二维简化版本,其中打印对象的设计可以表示为一个由
..#.....
..#..#..
#.#.##..
#.#####.
设计不必由单个连通块组成,但除了设计最底行的
使用 SLA 打印对象的过程是逐层进行的,从最底行开始。首先,该行的所有单元都被液态光敏树脂覆盖。然后激光扫描该行,将所有
..#.....
..#~~#..
#~#~##..
#~#####.
在手动吸除对象上残留的树脂时,你开始思考:仅通过知道打印后设计每一行残留的液态树脂量,能还原出原始设计的多少信息?对于上述设计,每一行(从设计顶部开始)的残留树脂量分别为
....
#..#
#..#
#.##
给定每一行(从顶行开始)残留液态树脂单元的数量列表,输出满足这些残留量的最窄对象设计的宽度。如果不存在这样的设计,输出
输入格式
第一行输入包含一个整数
至少有一行的残留液态树脂单元数量大于零。
输出格式
输出满足输入残留量的最窄对象设计的宽度(列数)。("最窄" 指列数尽可能少。)如果不存在这样的设计,输出
简化题意
即构造一个可以使每一层都能容纳下题目要求的格子数量的一个类似“碗”或者“箱子”的结构:
例如:
........................
#.......#.......#......#
##.....#####...###.....#
####..#######.#####....#
####.###############..##
那么可以容纳的位置就是
这些红圈圈内的地方。
并且要求构造出来的结构最窄,然后输出该宽度。
思路
由题可得该结构中的
那么如果遇到下层比上层容纳的多的话,就不能接在这里的下层了,只能再重新在旁边构造一个结构,那么宽度就会增加。
为了保证宽度最小,我们尽量让尽可能多的层叠在一起,遇到递增的再开一个新的结构增加宽度即可。
那么直接枚举一遍,时间复杂度
代码很短 awa
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100000+10;
int n;
int w[maxn];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
int sum=1;
for(int i=1;i<=n;i++)
{
if(w[i]>w[i-1]) sum+=w[i]-w[i-1]+1;
}
cout<<sum;
return 0;
}
温馨提醒:不开()()见祖宗。