Binary Land(ZOJ - 3478,BFS + 模拟)

ISO 26262中的失效率计算:Mission profile的使用 Mission profile:任务剖面,即产品在完成规定任务这段时间内所经历的时间和环境的时序描述;集成电路在工作时环境温度是在不停变化的,同时也存在运行状态和非运行状态;为此标准提出了根据任务剖面(Mission profile)以及集成电路的实际结温来评估热幅度变化、循环温度幅值等因素的影响;汽车电子元器件相关的Mission profile参考IEC TR 62380:Table 11。 阅读详情

一.题目链接:

ZOJ-3478

二.题目大意:

给你一个 10 × 15 的图,图中包括以下符号.

'H' :终点

'X' :墙

'O' :蜘蛛网

'.' :空地

再给出两只异性企鹅各自的起点坐标.

只可以选取一只企鹅进行操作.

一只企鹅进行运动时,另一只企鹅的运动与这只企鹅左右对称运动.

企鹅运动无限制,当企鹅要走进墙时,则这只企鹅不动.

当一只企鹅走进蜘蛛网时,此企鹅不再移动.

直到另一只企鹅到达 此企鹅 的临方格并花费 11 点时间,才可以将此企鹅救到另一只企鹅的位置.

普通移动时,花费 5 时间.

当操作企鹅被困时,移动花费 3 时间.

当非操作企鹅被困时,移动花费 2 时间.

问两只企鹅是否能走到终点

如果不能,则输出 -1

否则,输出最小花费时间.

三.分析:

BFS + 优先队列优化 + 松弛原理 即可

注意:当此企鹅被困在蜘蛛网时,另一只企鹅即使与此企鹅相邻,也并一定要将此企鹅救出来 因为这里一直WA

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define pi acos(-1.0)
#define ll long long int
using namespace std;

const int inf = 0x3f3f3f3f;

struct node
{
    int x1, y1;
    int x2, y2;
    int step;
};

char mp[20][20];
int vis[20][20][20][20];
int Move[2][4][2] = {-1, 0, 1, 0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 1, 0, -1};

struct cmp
{
    bool operator()(node a, node b)
    {
        return a.step > b.step;
    }
};

node fun(node cur, int dir, int i)
{
    node tmp = cur;
    if(dir == 1)
    {
        tmp.x2 += Move[1][i][0];
        tmp.y2 += Move[1][i][1];
        if(tmp.x2 < 0 || tmp.x2 >= 10 || tmp.y2 < 0 || tmp.y2 >= 15 || mp[tmp.x2][tmp.y2] == 'X')
            tmp = cur;
        return tmp;
    }
    else if(dir == 2)
    {
        tmp.x1 += Move[0][i][0];
        tmp.y1 += Move[0][i][1];
        if(tmp.x1 < 0 || tmp.x1 >= 10 || tmp.y1 < 0 || tmp.y1 >= 15 || mp[tmp.x1][tmp.y1] == 'X')
            tmp = cur;
        return tmp;
    }
    else if(dir == 3)
    {
        tmp.x1 += Move[0][i][0];
        tmp.y1 += Move[0][i][1];
        tmp.x2 += Move[1][i][0];
        tmp.y2 += Move[1][i][1];
        if(tmp.x1 < 0 || tmp.x1 >= 10 || tmp.y1 < 0 || tmp.y1 >= 15 || mp[tmp.x1][tmp.y1] == 'X')
        {
            tmp.x1 = cur.x1;
            tmp.y1 = cur.y1;
        }
        if(tmp.x2 < 0 || tmp.x2 >= 10 || tmp.y2 < 0 || tmp.y2 >= 15 || mp[tmp.x2][tmp.y2] == 'X')
        {
            tmp.x2 = cur.x2;
            tmp.y2 = cur.y2;
        }
        return tmp;
    }
}

int bfs(node cur)
{
    memset(vis, -1, sizeof(vis));
    cur.step = 0;
    vis[cur.x1][cur.y1][cur.x2][cur.y2] = 1;
    priority_queue <node, vector<node>, cmp> q;
    q.push(cur);
    node p, t;
    while(!q.empty())
    {
        p = q.top();
        q.pop();
        if(p.x1 == p.x2 && p.y1 == p.y2 && mp[p.x1][p.y1] == 'H')
            return p.step;
        if(mp[p.x1][p.y1] == 'O' && mp[p.x2][p.y2] == 'O')
            continue;
        if(mp[p.x1][p.y1] == 'O')
        {
            if((int)abs(p.x1 - p.x2) + (int)abs(p.y1 - p.y2) == 1)
            {
                t = p;
                t.x1 = t.x2;
                t.y1 = t.y2;
                t.step += 11;
                if(vis[t.x1][t.y1][t.x2][t.y2] == -1 || vis[t.x1][t.y1][t.x2][t.y2] > t.step)
                {
                    vis[t.x1][t.y1][t.x2][t.y2] = t.step;
                    q.push(t);
                }
            }
            for(int i = 0; i < 4; ++i)
            {
                t = p;
                t = fun(t, 1, i);
                t.step += 3;
                if(vis[t.x1][t.y1][t.x2][t.y2] == -1 || vis[t.x1][t.y1][t.x2][t.y2] > t.step)
                {
                    vis[t.x1][t.y1][t.x2][t.y2] = t.step;
                    q.push(t);
                }
            }
        }
        else if(mp[p.x2][p.y2] == 'O')
        {
            if((int)abs(p.x1 - p.x2) + (int)abs(p.y1 - p.y2) == 1)
            {
                t = p;
                t.x2 = t.x1;
                t.y2 = t.y1;
                t.step += 11;
                if(vis[t.x1][t.y1][t.x2][t.y2] == -1 || vis[t.x1][t.y1][t.x2][t.y2] > t.step)
                {
                    vis[t.x1][t.y1][t.x2][t.y2] = t.step;
                    q.push(t);
                }
            }
            for(int i = 0; i < 4; ++i)
            {
                t = p;
                t = fun(t, 2, i);
                t.step += 2;
                if(vis[t.x1][t.y1][t.x2][t.y2] == -1 || vis[t.x1][t.y1][t.x2][t.y2] > t.step)
                {
                    vis[t.x1][t.y1][t.x2][t.y2] = t.step;
                    q.push(t);
                }
            }
        }
        else
        {
            for(int i = 0; i < 4; ++i)
            {
                t = p;
                t = fun(t, 3, i);
                t.step += 5;
                if(vis[t.x1][t.y1][t.x2][t.y2] == -1 || vis[t.x1][t.y1][t.x2][t.y2] > t.step)
                {
                    vis[t.x1][t.y1][t.x2][t.y2] = t.step;
                    q.push(t);
                }
            }
        }
    }
    return inf;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        for(int i = 0; i < 10; ++i)
        {
            getchar();
            for(int j = 0; j < 15; ++j)
                scanf("%c", &mp[i][j]);
        }
        struct node cur;
        scanf("%d %d %d %d", &cur.x1, &cur.y1, &cur.x2, &cur.y2);
        getchar();
        cur.x1--;
        cur.y1--;
        cur.x2--;
        cur.y2--;
        int ans1 = bfs(cur);
        swap(cur.x1, cur.x2);
        swap(cur.y1, cur.y2);
        int ans2 = bfs(cur);
        int ans = min(ans1, ans2);
        if(ans == inf)
            printf("-1\n");
        else
            printf("%d\n", ans);
    }
    return 0;
}

 

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案 介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。 阅读详情

相关推荐

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160

P3855 [TJOI2008] Binary Land

Binary Land是一款任天堂红白机上的经典游戏,讲述的是两只相爱的企鹅Gurin和Malon的故事。两只企鹅在一个封闭的迷宫中,你可以控制他们向上下左右四个方向移动。但是他们的移动有一个奇怪的规则,即如果你按“上”或“下”方向键,两只企鹅会同时向上移动或向下移动1格;如果你按“左”方向键,则Malon向左移动1格,同时Gurin向右移动1格;如果你按“右”方向键,则Malon向右移动1格,Gurin向左移动1格。当然,如果某只企鹅被障碍挡住,它就不会移动了。

2301_77920554的博客 389

Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)

本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。

weixin_31220401的博客 312

P3855 [TJOI2008] Binary Land(BFS)(内附封面)

四叶她赢了!!!!!!!!!(虽说我不是四叶党但是她好可爱!)——|——BFS题目,G与M两只企鹅走迷宫

CH_canghan的博客 449

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1764

Vivado IP核与License许可全解析:从免费到收费,从评估到部署

本文全面解析Vivado IP核与License许可机制,从免费到收费IP核的选型指南到License的申请与部署策略。详细介绍了Xilinx官方IP核的优势与局限,第三方IP核的风险与应对,以及实战中的资源优化技巧和版本兼容性问题,帮助开发者高效利用Vivado工具链。

weixin_29169505的博客 367

[KSN2021] Binary Land

题目链接:[KSN2021] Binary Land 我们可以发现,如果一个数字最高位之后有一个0,那么是可以连向某个对应位置最高位为1的数字。 然后这个不难想到可以对每一个二进制位建立虚点。 我们发现如果这个虚点有作用,那么一定是某个数字最高位是这个,并且某个数字最高位之后某个0是这个。然后并查集维护连通性即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define

青烟绕指柔的博客 1136

VisionPro动态坐标系构建:CogFixtureTool与CogFixtureNPointToNPointTool实战解析

本文深入解析了VisionPro中动态坐标系构建的核心技术,重点对比了CogFixtureTool与CogFixtureNPointToNPointTool的原理与应用。通过实战案例,阐述了如何利用坐标跟随(Fixturing)技术解决工业视觉检测中因零件位置偏移导致的测量不准问题,实现从“固定”到“随动”的思维跃迁,从而构建稳定、精准的检测程序。

weixin_29207439的博客 563

[TJOI2008]Binary Land——[BFS]

【题意分析】 本来想做dp题的,然后发现这是道sb宽搜 直接来,暴力bfs,注意点是vis[][][][]数组要有四维(记录两个人的信息) 还有一只企鹅往左走,另一只企鹅往右走 输入字符用cin,还不能关流同步,不然会错,挺玄学的 getchar判断回车也会错 这个sb错误浪费了我好多时间 Code: #include <iostream> #include <cstdio&...

sleepyNick 344

基于STM32设计的便携式心电信号监测系统_474

本课题设计并实现了一种基于STM32单片机的便携式心电信号监测系统。系统以STM32F103C8T6为核心控制单元,结合PulseSensor心率传感器,实现对人体心率信号的采集与处理。通过单片机内部ADC模块对传感器输出的模拟电压信号进行采样,并对采集数据进行分析处理,从而计算得到实时心率值。

159

C# Modbus通信从入门到精通(2)——Modbus RTU协议原理

本文详细的介绍了Modbus RTU协议的原理,由多年经验高级工程师实战总结而成,绝对干货!

qq_34059233的博客 6383

vue-router路由元信息详解

在路由列表中,每个路由都有一个 meta 元数据字段, 我们可以在这里设置一些自定义信息,供页面组件或者路由钩子函数中使用。下面通过样例进行演示。 1,meta 数据配置: 这里我们将每个页面的 title 都写在 meta 中来统一维护。 const router = new Router({ routes: [ //配置路由,使用数组形式 { path: '/...

duansamve的博客 2916

系统安装(kuntaiR522 kvm安装)

鲲泰R522服务器kvm安装rocky

weixin_46396917的博客 1820

zoj 3478 Binary Land bfs

题意:给你地图‘X’是墙,‘.’是路,和两只公母企鹅的坐标,开始两只企鹅不会在墙里。他们如果没被困,或者没走到地图边缘,或者没被墙挡住,那么都是同时走的,上下同相走,左右反向走。求同时走到H点的最小时间。同时走耗时5s。图里有蜘蛛网‘O’,如果有一只被困,那么另一只可能是笨企鹅,也可能是聪明的企鹅,聪明的走一步耗时2s,笨的3s。如果一只企鹅走到另一只企鹅的旁边,可以把另一只救出来,让他到自己的位置。耗时11s。 两只企鹅如果都被困,就失败了。 做法: bfs,因为不知道哪只是笨的,所以要bfs两次。打

万事屋 929

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

FZU - 1688 Binary land

题目链接 Problem 1688 Binary land Accept: 72Submit: 171Time Limit: 1000 mSecMemory Limit : 32768 KB Problem Description Daxia liked a game named “binary land” (双企鹅,一款家机游...

weixin_33726943的博客 174

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

FOJ 1688 Binary land

求最短通关的按键次数。 马上可以想到是广搜。。。  简单题。 注意的地方是,两者水平上移动方向相反。 #include #include #include using namespace std; int dir[4][2] = { -1, 0, 0, 1, 1, 0

while(alive){enjoying & fighting} 1101

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

FZU - 1688 Binary land (bfs)

题目链接:http://acm.fzu.edu.cn/problem.php?pid=1688 题意:给个图,两只企鹅和终点都在固定位置,图的大小是固定的,中间一定会有一堵墙,每次对右边的企鹅进行操作,如果是操作左右,则左边企鹅的方向就会跟右边的相反,上下则不会。问两只企鹅同时到达终点的两侧需要的最小步数(每一次操作步数为1)。 分析:这道题的突破点在于建一个四维的访问状态vis...

purple_bro的博客 401

Number Puzzle (ZOJ - 2836 ,容斥原理)

一.题目链接: ZOJ-2836 二.题目大意: 第一行给出 n, m 第二行有 n 个数 求在不大于 M 的非负整数中,有多少个数可以被这 n 个数中的任意一个整除. 三.分析: 容斥原理模板题存一下(偷笑.jpg) 四.代码实现: #include <set> #include <map> #include <ctime> #incl...

The___Flash的博客 861

最大子矩阵(HDU - 1559,前缀和)

一.题目链接: HDU-1559 二.题目大意: 给出一个 m × n 的矩阵,和一个大小为 x × y 的子矩阵,求子矩阵的最大值为多少? 三.分析: 利用前缀和求出 顶点 到 每个点 矩阵的和,然后枚举子矩阵顶点的位置即可. 如图: 四.代码实现: #include <set> #include <map> #include <ctime&g...

The___Flash的博客 608

Plants vs. Zombies (ZOJ - 4062,二分答案 + 细节)

一.题目链接: ZOJ-4062 二.题目大意: n 个植物排成一排. 水壶只能移动 m 步. 水壶一步移动一个单位长度,所到达的位置,该植物的防御值会相应增加. 求浇水之后,所有植物防御值中最小值最大可以为多少. 三.分析: 二分答案即可. 不过要加限制条件,在 check(mid) 函数中 cnt 可能会暴 long long. 这是因为,假设n == 1e5,mid =...

The___Flash的博客 606

例题 3-4 猜数字游戏的提示(Master-Mind Hints,UVA 340)

一. 题目链接 : Master-Mind Hints UVA-340 二. 题目大意 : 多组数据,每组数据中有一个标准数字序列,之后多组数字序列,输出 A 和 B. A : 在每组数字序列中,与标准数字序列中数字且位置相同的数字个数. B :在每组数字序列中,有多少个数字在两组数字序列里都出现过,但位置不同. 三.分析 : A : A很好求,直接同时遍历 标准数字序列 和 ...

The___Flash的博客 493

Eight II (HDU - 3567,BFS 打表 + 思维)

一.题目链接: HDU-3567 二.题目大意: Eight的升级版,游戏规则相同. 每次给出两个字符串 A, B,问 从 A 到 B 的最少步数 并 打印最小字典序的路径. 三.分析: 看了大神的分析才懂。。。 在这里阐述一下. 只考虑 X 的位置,由于 1 ~ 8 数字无特殊性 所以可将所给的 A 重新编号. 例如 A1:8 7X 6 5 4 3 2 1 编号为 A...

The___Flash的博客 485

Kth Minimum Clique(2019牛客暑期多校训练营(第二场)D,K 大完全子图)

一.题目链接: Kth Minimum Clique 二.题目大意: 有 n 个点,有着各自的点权. 给出连通的边. 求权值 k 大的完全子图. 三.分析: 由于 n ≤ 1e3,所以直接暴搜即可. 这里和状压 DP 有点像,搜索的是状态以及对应的权值. 考虑状态的转移,比如在什么情况下,i 点可以加入. 因为是求完全子图,所以现状态应真包含于 i 点的连接点,否则就不是完全图...

The___Flash的博客 465

Books (ZOJ - 4067,思维 + 理解题意)

一.题目链接: ZOJ-4067 二.题目大意: DreamGrid 去买书,有 n 本书排成一行,价格记为 a[0],a[1] .... a[n - 1]. 若DreamGrid 所带的钱不少于 第 i 本书的价格,则买这本书. 最后DreamGrid 共买了 m 本书. if 不可能买了 m 本书,则输出Imp...

The___Flash的博客 462

Matrix (POJ - 3685,二分答案 + 二分)

一.题目链接: POJ-3685 二.题目大意: 给 n 和 m. 表示有一个 n × n 的矩阵,求第 m 小的元素的值. 矩阵元素的计算公式: 三.分析: 易得矩阵的元素在同一列上单增. 第一层二分答案. 因为是求第 m 小的数,所以必有 m 个数 ≤答案(数有重复). check(mid) 函数里先枚举列,对于每一列再二分有多少个数 ≤ mid即可. ps: 控制边界...

The___Flash的博客 450

Fairy tale(BFS + 大模拟)

一.题目链接: Fairy tale 二.题目大意: 给你一个N × N 的地图,图上的每个点有四种方向(E W S N),代表着移动方向. 在 t = 0 时,saya 在 (1, 1),treasure 在 (n, n). 在每个单位时间内,分为 3 步. ①saya 先按照地图移动一个单位. ② saya 可以向四个方向移动一个单位,saya 会移动到距离 treasure ...

The___Flash的博客 445
上一篇: Calculate the Function( ZOJ - 3772,线段树 + 递推矩阵乘积)
下一篇: Can you answer these queries?( HDU - 4027,线段树 + 细节)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值