牛客网 106 J-Various Tree (BFS复习)

用C#实现面向对象编程之继承和多态概念的示例程序 这是文章《面向对象编程之继承和多态》的配套示例程序。在学习面向对象编程时都学习到三个概念:封装、继承、多态。封装已经讲解过,可以翻一下本博客的发表记录。所谓的继承,就是父类已经实现的属性、方法等,子类也跟着有,无需重复实现。所谓的多态,就是父类只定义的属性、方法等的名称、数据类型、参数,具体由子类实现。 立即下载

题目链接

题目

题目描述
It’s universally acknowledged that there’re innumerable trees in the campus of HUST.

And there are many different types of trees in HUST, each of which has a number represent its type. The doctors of biology in HUST find 4 different ways to change the tree’s type x into a new type y:

  1. y=x+1

  2. y=x-1

  3. y=x+f(x)

  4. y=x-f(x)

The function f(x) is defined as the number of 1 in x in binary representation. For example, f(1)=1, f(2)=1, f(3)=2, f(10)=2.
Now the doctors are given a tree of the type A. The doctors want to change its type into B. Because each step will cost a huge amount of money, you need to help them figure out the minimum steps to change the type of the tree into B.

Remember the type number should always be a natural number (0 included).
输入描述:

One line with two integers A and B, the init type and the target type.

输出描述:

You need to print a integer representing the minimum steps.

示例1
输入

5 12

输出

3

说明

The minimum steps they should take: 5->7->10->12. Thus the answer is 3.

分析

【题意】
给出起点 A 和终点B,每次可以对 A 进行四种操作

  • A=A+1

    • A=A−1
    • A=A+f(A)
    • A=A−f(A)
    • 求 A→B 需要的最少操作次数
      【思路】
      每种状态都有四个可以转移的方向,而且由于小的数可能有更多的1,向前搜索也是有必要的,所以四个搜索的方向都要考虑。

      不妨放在图上思考:含 n 个点,4∗n条边的有向图,求从A出发到B的最短路径。咋一看,往四个方向搜索会产生指数级的新状态,但其实总体来看,一共只有1e6个点,最坏的情况也不过是把所有的点都搜索一遍而已,由于是无权图求最短路径,直接上BFS搜索即可。
      【注意】
      虽然说最坏的情况要搜索所有的点一遍,但这还是要建立在剪枝的基础上:搜索过的点一定不能重复搜索,不然复杂度会炸(不要问我为什么知道)

      代码

      #include<stdio.h>
      #include<queue>
      using std::queue;
      int a, b;
      
      //预处理1~n每个十进制数含有的1的个数
      int bo[1000006] = { 0 };
      int f(int x) {
          if (x <= 0)return 0;
          if (bo[x] > 0)return bo[x];
          int temp = x / 2;
          return bo[x] = (f(temp) + x % 2);
      }
      
      //BFS辅助队列
      queue<int> help;
      int aim;
      //vis数组记录搜索过的状态,防止在环上反复搜索,把需要搜索的状态总数降低到n个
      int vis[1000006] = { 0 };
      //bfs的非递归写法
      int bfs(int cur,int cost) {
          int sz;
          int temp;
          while (!help.empty())
          {
              sz = help.size();
              for (int i = 0; i < sz; ++i) {
                  temp = help.front(); help.pop();
                  if (vis[temp] == 1)continue;
                  else vis[temp] = 1;
                  //遇到终点,结束搜索
                  if (temp == aim)return cost;
                  //加入下一次搜索的四个新状态
                  help.push(temp - 1);
                  help.push(temp + 1);
                  help.push(temp - f(temp));
                  help.push(temp +f(temp));
              }
              ++cost;
          }
          return -1;//没找到,理论上是不可能的(重复+1/-1一定能得到B),但为了语法上的正确添加一个返回值
      }
      
      int main() {
          scanf("%d %d", &a, &b);
          help.push(a);
          aim = b;
          b = bfs(a, 0);
          printf("%d", b);
      }
ScreenInk 0.0.1.exe 立即下载

相关推荐

外盘期货历史高频tick数据涵盖CME、ICE等交易所的主要品种,包含能源、贵金属、农产品、股指和外汇期货 数据字段有交易日期、精确到毫秒的时间、成交价格、成交量、持仓量以及买卖方向标识 部分品种还提

外盘期货历史高频tick数据涵盖CME、ICE等交易所的主要品种,包含能源、贵金属、农产品、股指和外汇期货。数据字段有交易日期、精确到毫秒的时间、成交价格、成交量、持仓量以及买卖方向标识。部分品种还提供盘口五档或十档挂单数据。所有数据按交易日压缩打包,解压后为CSV格式,便于直接读取分析。 数据源:CMES金融数据库

AtCoder Beginner Contest 085 D Katana Thrower(贪心)

Problem Statement You are going out for a walk, when you suddenly encounter a monster. Fortunately, you have N katana (swords), Katana 1, Katana 2, …, Katana N, and can perform the following two kind

toby的博客 928

三相PWM整流器双闭环控制仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了三相PWM整流器双闭环控制的Simulink仿真模型,重点实现电压外环与电流内环的协同控制策略,通过仿真验证系统在稳态与动态工况下的运行性能。模型涵盖主电路拓扑结构、PWM调制技术、坐标变换(如abc/dq变换)、PI控制器设计及双闭环控制逻辑的实现,能够实现单位功率因数运行、直流侧电压稳定控制以及网侧电流正弦化等目标。同时,文档进一步拓展至VOC(虚拟同步发电机控制)与SVPWM调制相结合的高级控制策略,提升了系统的动态响应能力与控制灵活性。; 适合人群:具备电力电子技术与电力系统基础知识,熟悉Simulink仿真环境的电气工程及相关专业的本科生、研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解三相PWM整流器的工作原理及其双闭环控制策略的设计方法;②掌握基于Simulink的电力电子系统建模、仿真与控制系统调试技术;③为后续研究电压源换流器(VSC)、虚拟同步控制(VOC)、微电网并网控制等先进电力电子控制技术奠定理论与实践基础。; 阅读建议:建议结合经典电力电子教材与本仿真模型同步学习,重点关注PI控制器参数整定、坐标变换模块的搭建逻辑以及系统稳定性分析方法,有条件者可进一步将仿真结果对接实际硬件平台进行实验验证,以深化对控制策略工程应用的理解。

codeforces 922 C Cave Painting

能同时满足n mod i = i -1 (i = 1, 2, 3, ..., k)的n有多少个呢?

toby的博客 898

RocketMq面板访问异常 com.alibaba.fastjson.JSONException: not close json text, token : string

rocketmq JSONException: not close json text, token : string 问题解决

qq_21067307的博客 5573

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 356

codeforces 914 D Bash and a Tough Math Puzzle

结合了gcd的线段树,每个区间结点维护的都是这个区间的gcd。单点更新。每次询问需要检查 x 相对于[l, r]的gcd是否为almost right(如果只修改一个叶子结点就能让区间[l, r]的gcd变成x)

toby的博客 854

别再手动调参了!用Optuna+PyTorch搞定Transformer时序预测超参数(附完整代码)

本文详细介绍了如何利用Optuna和PyTorch实现Transformer时序预测模型的自动化超参数调优。通过贝叶斯优化技术,显著提升单变量时序预测的效率和准确性,并附有完整代码实现。文章涵盖模型架构设计、数据预处理、Optuna调参实战及生产环境部署建议,为开发者提供一站式解决方案。

weixin_33704234的博客 576

2018 CCCC天梯赛 L2 04 秀恩爱分得快

所以说,秀恩爱真的让人头大orz

toby的博客 840

百度地图街景图像批量获取

由于个人研究需要在最近试了一下使用API获取百度地图街景图片,在此介绍一下基于我个人需求的百度街景批量获取方法,本文以Python编码作为主要方法,如果对零编码工具有需要的可以关注一下UA城市分析小组刚刚发布的街景图片获取工具。 街景图像用作区域细粒度空间指标测度需要解决几个问题。 1. 首先就是调用额度的限制,现在百度对于个人认证开发者每天可用的街景图像调用额度为100张,在不考虑购买额度上限(1万张600元,其实有经费的前提下可以直接考虑钞能力)的情况下动辄几千上万张的爬取数量会大大增加需要爬取的时间周

boycetoon29的博客 1万+

傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)

本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。

weixin_29090677的博客 150

codeforces 916 A Jamie and Alarm Snooze

一道很简单的模拟题。

toby的博客 838

以太网传输硬件设计大全

1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。

weixin_45365488的博客 6749

codeforce 915 B Browser

Luba is surfing the Internet. She currently has n opened tabs in her browser, indexed from 1 to n from left to right. The mouse cursor is currently located at the pos-th tab. Luba needs to use the tab

toby的博客 783

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1711

【教程4>第5章>第28节】基于帧同步+相位同步+位同步的QPSK调制解调通信系统整体性能分析

综上所述:1.SNR<10db时,整体性能下降,当SNR=0db时,系统无法正常工作。2.gardner环性能达到2.5e-5时偏可以正常工作,增加之后无法正常工作。3.当相位偏差大于pi/4的时候,对最后的性能会有一定影响。

FPGA/MATLAB学习教程/源码/项目合作开发 556

codeforces 922 D Robot Vacuum Cleaner

抽象化字符串,再利用贪心对他们排序

toby的博客 760

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

codeforces 918 B Radio Station

Description As the guys fried the radio station facilities, the school principal gave them tasks as a punishment. Dustin’s task was to add comments to nginx configuration for school’s website. The sc

toby的博客 719

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

codeforces 931 B. World Cup

二叉树上的最近公共祖先问题

toby的博客 706

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Codeforces 907A Masha and Bears

A family consisting of father bear, mother bear and son bear owns three cars. Father bear can climb into the largest car and he likes it. Also, mother bear can climb into the middle car and she likes i

toby的博客 688

codeforces 967 C Stairs and Elevators

找最近的楼梯或电梯,特判同一层楼的情况

toby的博客 662

codeforces 913 c Party Lemonade(贪心+DP)

简单动态规划,每次把状态更新到最优,然后把尚不确定的部分暂时交给dp函数来处理,回调的时候再真正决定选择哪一种方案

toby的博客 648

codeforces 967 D Resource Distribution

短板*数量,选好短板以后就只关心数量。遍历短板的位置,并在大于短板的范围寻找可能的解

toby的博客 647

codeforces 935 C. Fifa and Fafa

圆内的小数计算

toby的博客 644

codeforces 909 D. Colorful Points

字符串的压缩操作,以及不断减少过程中的合并

toby的博客 574
上一篇: hdu1166 敌兵布阵 - 树状数组学习
下一篇: codeforces 967 C Stairs and Elevators
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值