传送门
题目大意:(套娃)按照大小包含顺序从 1 − N 1-N 1−N编号,编号大的套娃可以套住编号小的套娃,如下图所示,套娃层层套住,最内层的套娃下标最小。
容易看出,要想取出内层的套娃,需要层层拆开。支持两个操作:
- 当前套娃内部空,放入一个套娃;
- 当前套娃内部非空,取出一个套娃。
现在给定初始状态和最终状态下每个套娃外层的套娃的编号,要求你求出从初始状态变动到末状态所需要执行的最少操作数。(套娃的父亲编号为0时,套娃独立存在)
思路分析:首先我们统计初始状态下将套娃全部拆散再组合成末状态所需要的操作数,此操作数为最大的操作数。然后在最大操作数的基础上消除不必要的操作。考虑如何消除:
- 首先找到每堆套娃的最内部的套娃编号;
- 容易知道,对于内部一样的套娃,可以直接整体取出。因此每出现一个与末状态相同的套娃,就可以节省两步操作(取出和放回);
- 我们从每个最内部的套娃沿给定的 F a Fa Fa数组不断向外层跳,每次判断是否与末状态相同,如果相同,则在总操作中减去两部操作。
#include
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], st[N];
signed main(){
int n = 0, tot = 0, det = 0; cin >> n;
for(int i = 1; i > a[i];
if(a[i]) tot += 1, st[a[i]] = 1;
}
for(int i = 1; i > b[i];
if(b[i]) tot += 1, st[b[i]] = 1;
}
for(int i = 1; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?