首页 > 编程语言 >周六900C++班级2022-10-29 广搜

周六900C++班级2022-10-29 广搜

时间:2022-10-29 10:24:04浏览次数:80  
标签:10 900 标记 int C++ vis tail 移动 农夫

7588: 农夫抓牛

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟

2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

#include<bits/stdc++.h>
using namespace std;
struct node{
    int x,y,step;
};
node q[100005];
int nex[3] = {-1,1,2};
int vis[100005]; //标记数组 
int n,k,f,ans; //f终点的标记 
void bfs()
{
    int head = 1,tail = 1;
    q[tail].x = n;
    q[tail].step = 0;
    tail++; //扩充队尾
    vis[n] = 1; //标记起点
    while(head<tail)
    {
        for(int i=0;i<3;i++)
        {
            int tx;
            if(i<2) tx = nex[i]+q[head].x; //方向数组+队首head的位置 
            else tx = nex[i]*q[head].x;
            if(tx>100000 || tx<0) continue;//越界判断
            if(vis[tx]==0) //vis数组里没标记过,那么就让tx加入队尾
            {
                vis[tx] = 1; //标记tx
                q[tail].x = tx;
                q[tail].step = q[head].step+1; 
                tail++; //扩充队列长度 
            } 
            if(tx==k){ //找到终点 
                f = 1;
                ans = q[tail-1].step;
                break;
            }
        }
        if(f)break;
        head++; //队首往后一位 
    } 
}
int main()
{
    cin>>n>>k; //输入起点终点 
    bfs(); //寻找最短路 
    cout<<ans; //输出最短路长 
     return 0;
}
View Code

 

标签:10,900,标记,int,C++,vis,tail,移动,农夫
From: https://www.cnblogs.com/jyssh/p/16838149.html

相关文章

  • 浙江理工大学入队200题——10E
    问题E:零基础学C/C++114——直接插入排序题目描述编一C程序,该程序可以测试多个测试组,每个测试组它能读入一串整数并对它们进行从小到大直接插入排序,同时输出排序时对这......
  • 前端项目实战102-postgrest下拉框搜索接口衍生
    getSelect:(resource:any,params:any,filter?:any)=>{constdata=newURLSearchParams(filter)consturl=`${PostgrestUrl}/${resource}?s......
  • 前端项目实战105-isCompoundKey查询
    ["id"]76search_manufacture_sizeconstisCompoundKey=(primaryKey:PrimaryKey):Boolean=>{returnprimaryKey.length>1;}判断数组长度是否大于1返回值Boole......
  • UG NX 10.0快速入门及应用技巧
    《UGNX10.0快速入门及应用技巧》1.切换经典开发环境  文件->实用工具->用户默认设置->用户界面  或者在菜单栏中  文件->首选项->用户界面  布局:功......
  • 浙江理工大学入队200题——10D
    问题D:零基础学C/C++113——并列排名题目描述在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第......
  • CH32F103C8T6调试口Disable后的修复办法
    1.问题描述   因为软件编程,将CH32F103的debugdisable了,无法通过仿真器下载程序。   2.修复  2.1解决思路    利用厂家给的串口ISP进行下载(HU......
  • 沁恒CH32V003F4P6 开发板上手报告和Win10环境配置
    CH32V003沁恒最近推出的低价CH32V003系列,基于青稞RISC-V2A内核,48MHz主频,2KBSRAM,16KBFlash,工作电压兼容3.3V和5V.主要参数如下SystemClock:48MHzSRAM:2......
  • 将1000内素数放入数组
    #include<stdio.h>intmain(){inti=0;intj=0;inttemp=0;intarr[1000]={};for(i=2;i<1000;i++){ for(j=2;j<i;j++){ if(i%j==0){ break;}} if(......
  • 2022年 10月28 日 学习第一天
    注释书写注释是非常好的习惯,必须坚持下去、 平时写代码一定要注意规范 Java中的注释有三种单行注释——在新的一行,用//后面跟着注释。只能注释一行文字多行......
  • 记录第一次使用c++和汇编联合编译
    32位从Ida把目标函数扣出来toUapperprocneararg_0=dwordptr4pushesimovesi,[......