Olya and Energy Drinks【Codeforces 877D】【BFS+思维+剪枝】

2023-10-27

Codeforces Round #442 (Div. 2) D


  这天给学弟学妹们出了这道题,没想到背锅了……感觉要0A了…… QAQ,确实,今天我再次写的时候也WA了好几发,哎,这锅背了……

  看到有些的代码code:访问过的点都标记为mp[x][y] = '#',但是这样是不可以的,这样反驳:

……(前面进行了很多步,进行到这里了:)

##.#
....
##.#

  这只是图中的一部分(重点标记),我们(2, 1)这个点走到(2, 3)这个点,假如打上了mp[2][3] = '#'的话,那么我们(1, 3)这个点就没法去行径到(3, 3)这个点了,同样的,我们在图中分析一下,(2, 1)到(3, 3)需要走2步(不管K时候),(1, 3)到(3, 3)可能只需要一步,这样的话,我们就有可能会少掉一个最优解。

  所以,我们是不是要判断同一方向上的,那么也就是假如同一方向上是来过的话,我们就没必要再走下去了,再者,如果从不同方向上到达这点,时间上只有更优情况才能直接进队,否则,就是向该方向上继续走下去。这样就可以避免了最优解丢失的问题了。

  然后,还有坑点的哦,可能起点和终点是重合的(QAQ对不起,我的锅,好多坑,可能没人会过了)呜呜呜…… 

  但是,其实到这还没结束,这样子的代码会处理到很多重复的部分,譬如说,我们往一个方向上走,再用第二个点再往这个方向上走的时候,是不是浪费了?(这道题也是卡了时间的)

譬如说,K = 3:

........

  我们这么走下去,第二、第三、第四个点都是1步到达的对吧,但是我们从2开始的呢,我们再去跑一遍第三、第四个点才到第5个点岂不是浪费了时间,所以,我们在该方向上,要避免第二、第三个点的直接起步,从第四个点开始往后跑第五、第六、第七个点,然后同样的,再从第7个点去开始跑,go on!

  之前的距离是K只有3对吧,K的上限可是1e3,那么我们要是没有关注到这个问题,那么就是在1~1000点都入队之后,1往下跑的2~999都是浪费时间的部分,只有从1000往下的,才是有效的利用。剪枝!节约了时间。(QAQ,我也没有1A这道题,是很难的了)

以下Code是基于某个错误代码上略改的,也改过来了该大聚聚在上述问题上的没考虑到的点。

  总之,超级抱歉……QAQ,求原谅。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <list>
#include <map>
#define P(x) x>0?x:0
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef vector<int>:: iterator VITer;
const int maxn=1e3+5;
const int dir[4][2]={
    1,0,
    0,1,
    -1,0,
    0,-1
};
char mp[maxn][maxn];
int vis[maxn][maxn];
int sx,sy,ex,ey;
int n,m,k;
struct node
{
    int x, y, s;
    node(int a=0,int b=0,int c=0):x(a),y(b),s(c){}
};
int bfs()
{
    memset(vis,-1,sizeof(vis));
    queue<node >q;
    q.push(node(sx,sy,0));
    //mp[sx][sy]='#';
    vis[sx][sy] = 0;
    while(!q.empty())
    {
        node tmp=q.front(); q.pop();
        for(int i=0;i<4;i++)
        {
            for(int j=1;j<=k;j++)
            {
                int xx=tmp.x+j*dir[i][0];
                int yy=tmp.y+j*dir[i][1];
                if(xx==ex && yy==ey)
                    return tmp.s+1;
                if(xx<=0||yy<=0||xx>n||yy>m||mp[xx][yy] == '#')
                    break;
                if(vis[xx][yy] != -1 && vis[xx][yy] < tmp.s + 1) break;
                if(vis[xx][yy] == -1)
                {
                    vis[xx][yy] = tmp.s + 1;
                    q.push(node(xx,yy,tmp.s+1));
                }
                //mp[xx][yy]='#';
            }
        }
        //q.pop();
    }
    return -1;
}
int main()
{
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        getchar();
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                scanf("%c",&mp[i][j]);
            }
            getchar();
        }
        scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
        if(sx == ex && sy == ey) printf("0\n");
        else printf("%d\n",bfs());
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Olya and Energy Drinks【Codeforces 877D】【BFS+思维+剪枝】 的相关文章

  • [STL]vector常见用法详解

    目录 引入 常见用法介绍 1 vector的定义 2 vector容器内元素的访问 3 vector常用函数实例解析 1 push back 2 pop back 3 size 4 clear 5 insert 6 erase vector
  • 第十届蓝桥杯省赛C++B组 迷宫

    试题 E 迷宫 本题总分 15 分 问题描述 下图给出了一个迷宫的平面图 其中标记为 1 的为障碍 标记为 0 的为可 以通行的地方 010000 000100 001001 110000 迷宫的入口为左上角 出口为右下角 在迷宫中 只能从
  • P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib【普及】

    USACO1 5 特殊的质数肋骨 Superprime Rib 题目描述 农民约翰的母牛总是产生最好的肋骨 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们 农民约翰确定他卖给买方的是真正的质数肋骨 是因为从右边开始切下肋骨 每次
  • 奶酪【BFS】

    题目链接 点从z 0为起点 想跑到z h 只能在球内 或者是球表层上跑 问能否从起点跑到终点 直接暴力bfs判断即可 include
  • 22年菲尔兹奖获得者HUGO DUMINIL-COPIN 研究内容总结

    雨果 迪米尼 科潘获得 2022 的菲尔兹数学奖 因解决了统计物理中相变 概率理论的长期问题 特别是三维和四维问题以及二维中的不可积情况 下 雨果最显著的成果是三维和四维 Ising 模型 他与合作者解决了 80 年代以来一直存在的问题 建
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • Financial Crisis【点双连通分量】

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • AcWing 378. 骑士放置(最大独立集&&匈牙利算法)

    输入样例 2 3 0 输出样例 4 解析 题意为求最大独立集 即为总点数 最小点覆盖 include
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • Two Arithmetic Progressions

    Two Arithmetic Progressions 题目链接 题意 思路 AC代码1 include
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • hdu1827Summer Holiday【tarjan强连通分量解决最小联系费用】

    1A 撒花 这比买买买开心多了 思路 既然是强连通分量的题 很容易想到形成的东西是一坨一坨的 哈哈 然后如果某一坨入度为0 那么很不幸 这一坨只能直接被威士忌通知 至于具体通知这一坨中的哪一个 枚举一遍就知道了 最后把话费求和 感觉强连通分
  • 714阿里巴巴模拟面试

    介绍一下数据库分页 https www nowcoder com questionTerminal 3577280c810546658f06f19c01ff0345 给定一棵树 求出这棵树的直径 即两个节点距离的最大值 应该是左右子树遍历深
  • 图论--最近公共祖先LCA

    最近公共祖先LCA LCA Least Common Ancestors 即最近公共祖先 是指这样一个问题 在有根树中 找出某两个结点u和v最近的公共祖先 另一种说法 离树根最远的公共祖先 最近公共祖先是相对于两个节点来说的 一般来说 最近
  • 1600*B. pSort(并查集)

    解析 并查集 将能够交换的位置相连 查看对应的位置能够交换 include
  • Binary Tree on Plane【费用流】

    题目链接 CF 277 E 题意翻译 给你平面上 n 个点 2 n 400 要求用这些点组成一个二叉树 每个节点的儿子节点不超过两个 定义每条边的权值为两个点之间的欧几里得距离 求一个权值和最小的二叉树 并输出这个权值 其中 点 i 可以成
  • 第14届蓝桥杯C++B组省赛

    文章目录 A 日期统计 B 01 串的熵 C 冶炼金属 D 飞机降落 E 接龙数列 F 岛屿个数 G 子串简写 H 整数删除 I 景区导游 J 砍树 今年比去年难好多 Update 2023 4 10 反转了 炼金二分没写错 可以AC了 U
  • E (1052) : DS树--带权路径和

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 计算一棵二叉树的带权路径总和 即求赫夫曼树的带权路径和 已知一棵二叉树的叶子权值 该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数 然后求
  • 860.染色法判定二分图

    二分图是指一个图中的所有顶点可以分为两部分 并且每条边连接的是属于不同部分的两个顶点 include

随机推荐

  • 神经网络及其matlab仿真

    本文进行了神经网络原理简介 并对蜢虫分类问题进行了matlab仿真 一 神经网络介绍 神经网络是由具有适应性的简单单元组成的广泛并行互联的网络 它的组织能够模拟生物神经系统对真实世界物体作出的交互反应 神经网络中最基本的成分是神经元 neu
  • mysql 减法,mysql 减法

    SQL codemysql gt desc t a175460677 Field Type Null Key Default Extra uName char 3 YES NULL money float 10 2 YES NULL
  • Arduino平衡小车

    Arduino平衡小车 1 概述 此Arduino平衡小车在主控方面由Arduino UNO R3和Arduino sensor shield v5 0传感器扩展板组成 采用TB6612FNG作为电源和电机之间的中介给带编码器的直流电机供电
  • Nacos鉴权和配置加密

    nacos存在可以任意用户添加的问题 更改提交方式为POST 访问 nacos v1 auth users test111username test111 password 123456 新建一个账号test111 可以看到创建用户成功 如
  • STM32读写内部Flash(介绍+附代码)

    概述 内部Flash读写详解 一 介绍 首先我们需要了解一个内存映射 stm32的flash地址起始于0x0800 0000 结束地址是0x0800 0000加上芯片实际的flash大小 不同的芯片flash大小不同 RAM起始地址是0x2
  • SMTP:防止追踪发件人IP

    1 使用网页版gmail发信 邮件头不带X Originating IP 2 javamail调用SMTP时加代理 props put mail smtp socks host 10 11 22 2 props put mail smtp
  • 背包

    01背包 问题描述 有N件物品和一个容量为V的背包 第i件物品的体积是weight i 价值是value i 求解将哪些物品装入背包可使价值总和最大 实现代码 include
  • Java-查看运行时对象占用内存

    Java 查看运行时对象占用内存 一 查看项目运行时的进程ID jps 二 导出运行信息到二进制文件中 选择想要查看程序的进程ID 例如 jmap dump format b file heap bin 20772 不能在系统目录中创建 会
  • STM32单片机蓝牙-APP全自动洗衣机水位检测洗涤脱水排水

    实践制作DIY GC0164 蓝牙 APP全自动洗衣机水位检测 基于STM32单片机设计 蓝牙 APP全自动洗衣机水位检测 二 功能介绍 硬件组成 STM32F103C单片机最小系统 LCD1602显示器 1个5V直流电机 低速洗衣高速脱水
  • NC portal保存只能获取当前子表选中行的数据集问题

    保存是获取子表数据只能获取到当前选中的行 代码如下 LfwViewmain LfwRuntimeEnvironment getWebContext getPageMeta getView main Dataset bodyds main g
  • mysql回收用户权限

    1 创建test1用户 select password test1 password test1 06C0BF5B64ECE2F648B5F048A71903906BA08E5C create user test1 localhost id
  • 设计模式--策略模式

    策略模式 属于行为型模式基本原理 一个类的行为或其算法可以在运行时更改主要流程 1 创建策略基类 并根据不同行为实例化不同的策略类 2 使用时选择合适的策略类注意 如果一个系统的策略太多最好考虑其他模式 include
  • Python绘制柱状图并美化

    python绘图合集 往期绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴
  • ICLR2021

    USING LATENT SPACE REGRESSION TO ANALYZE AND LEVERAGE COMPOSITIONALITY IN GANS 作者 Lucy Chai Jonas Wulff Phillip Isola 单位
  • 电容数据手册阅读

    SCOPE 该说明书描述介绍了什么 APPLICATIONS 电容的应用范围 FEATURES 电容的特点 ORDERING INFORMATION GLOBAL PART NUMBER PHYCOMP CTC 12NC 订货信息 全球零件
  • Ubuntu nginx C compiler cc is not found

    二 遇到的问题 1 问题内容 checking for C compiler found but is not working configure error C compiler gcc is not found 2 原因分析 confi
  • js数组循环的一种算法

    数组循环的一种算法
  • 计算机网络知识思维导图

    网络体系结构 交换技术 传输层协议 数据链路层
  • 关于Findbugs的一些常见报错的翻译和处理方式

    在Lab5中要求使用 CheckStyle 和 FindBugs 工具对经过人工走查的 Lab4 代码进行自动的静态代码分析 在使用FindBugs的过程中 出现了一些难以理解的报错 经查阅资料 了解了错误的原因以及一些大致的解决办法 下面
  • Olya and Energy Drinks【Codeforces 877D】【BFS+思维+剪枝】

    Codeforces Round 442 Div 2 D 这天给学弟学妹们出了这道题 没想到背锅了 感觉要0A了 QAQ 确实 今天我再次写的时候也WA了好几发 哎 这锅背了 看到有些的代码code 访问过的点都标记为mp x y 但是这样