Codeforces[CF1036B]Diagonal Walking v.2题解
题目大意
很明显,这道题就是求 k 步之内到达点 \((a,b)\) ,然后尽量走对角线,求能走对角线的最大值。
做题思路
首先明白一个事实,即一个对角线可以通过增加一步而抵达点不变,如图:

我们可以这样思考这道题,在到达目的地以后,剩余步数如果为双数,则在对角线来回走,最后会到目的地。但如果剩余步数为单数,我们通过上图转化最后依旧到达目的地。
现在考虑什么时候输出-1,即为走完k步后仍无法到达目的地,考虑从原点到达目的地需要的最小步数即为 \(max(a,b)\)
所以排除掉无法到达的情况,我们分类讨论:
设 a 和 b 中,a 为较大的一个数,如果
(a-b)%2==0,那么走对角线我们会先到达 b 的限定高度,考虑优化走到 a 的路线,以 \((5,3)\) 为例,走到3的限定高度后,如果剩余路线为双数,考虑上下跳走,答案 \(k\) 。:

依旧设 a 为较大的一数,如果
(a-b)%2==1,那么我们只好消耗一格走平路以到达目的地,答案 \(k-1\) ,以 \((5,2)\) 为例:

最后,我们只需要判断一下剩余的步数能不能全部在对角线上反复横跳。如果不行,则贡献为-2(开头讲了)
线上AC代码:
#include<bits/stdc++.h>
using namespace std;
long long t,n,m,k;
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&k);
if(k<max(n,m)){
printf("-1\n");
continue;
}
if((max(n,m)-min(n,m))%2==1) k--;
else if((k-max(n,m))%2==1) k-=2;
printf("%lld\n",k);
}
return 0;
}
在此补充一个我有点迷糊的点,即为什么判断 if((max(n,m)-min(n,m))%2==1) 后,不用再次判断剩余的 k 是否为为双数,上图,

满足 if((max(n,m)-min(n,m))%2==1) 意味着我们到达目的地之前至少走了一个平路,此时若 k 为单数,直接将多的一个平路改为对角线加平路(还是最开始将的三角转换),如上图。
Codeforces[CF1036B]Diagonal Walking v.2题解的更多相关文章
- codeforces 1036B - Diagonal Walking v.2【思维+构造】
题目:戳这里 题意:起点(0,0),终点(n,m),走k步,可以走8个方向,问能不能走到,能走到的话最多能走多少个斜步. 解题思路:起点是固定的,我们主要分析终点.题目要求走最多的斜步,斜步很明显有一 ...
- Diagonal Walking v.2 CodeForces - 1036B (思维,贪心)
Diagonal Walking v.2 CodeForces - 1036B Mikhail walks on a Cartesian plane. He starts at the point ( ...
- CF 1036B Diagonal Walking v.2——思路
题目:http://codeforces.com/contest/1036/problem/B 比赛时只能想出不合法的情况还有走到终点附近的方式. 设n<m,不合法就是m<k.走到终点方式 ...
- CF 1036 B Diagonal Walking v.2 —— 思路
题目:http://codeforces.com/contest/1036/problem/B 题意:从 (0,0) 走到 (n,m),每一步可以向八个方向走一格,问恰好走 k 步能否到达,能到达则输 ...
- B. Diagonal Walking v.2
链接 [https://i.cnblogs.com/EditPosts.aspx?opt=1] 题意 二维平面从原点出发k步,要到达的点(x,y),每个位置可以往8个方位移动,问到达目的地最多可以走多 ...
- # Codeforces Round #529(Div.3)个人题解
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- Codeforces 547C/548E - Mike and Foam 题解
目录 Codeforces 547C/548E - Mike and Foam 题解 前置芝士 - 容斥原理 题意 想法(口胡) 做法 程序 感谢 Codeforces 547C/548E - Mik ...
- Codeforces Round #557 (Div. 1) 简要题解
Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...
- Codeforces Round #665 (Div. 2)A-C题解
A. Distance and Axis 题目:http://codeforces.com/contest/1401/problem/A 题解:对于n来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...
随机推荐
- AI时代你应聚焦的领域在哪里
1. 每个人都应该拥抱AI 随着AI的飞速发展,把我们带到了一个全新的时代.在这个时代,AI将逐步渗透到各个方面,比如:自动驾驶.智能家居.医疗诊断.大模型等等.每个人都应该积极拥抱AI,让AI给我们 ...
- 低代码如何借助 K8s 实现高并发支持?
引言 在当今这个数字化时代,互联网的普及和技术的飞速发展使得应用程序面临着前所未有的挑战,其中最为显著的就是高并发访问的需求.随着用户数量的激增和业务规模的扩大,如何确保应用在高并发场景下依然能够稳定 ...
- MyBatis-Plus删除操作的几种基本方法
delete删除的三种方法 一.根据 id 删除 @Test void deleteById(Integer id) { empMapper.deleteById(new Emp().getId()) ...
- 如何构建“集成神经网络”“Ensemble neural network”
参考: https://arxiv.org/pdf/1603.05691.pdf 本文要讨论的是如何构建"集成神经网络"("Ensemble neural network ...
- 机器人的运动控制是否可以引入生物学信息,生物学信息是否可以辅助机器人的智能控制算法的训练:《Robotic prosthetic ankles improve 'natural' movement, stability》
相关内容: Robotic prosthetic ankles improve 'natural' movement, stability 看了上面的论文的介绍(内容没看到,不是open access ...
- NVIDA GPU-SXM和NVIDA GPU-PCIe 两种类型显卡到底哪个性能更高?
相关: 大模型时代该用什么样的显卡 -- 实验室新进两块A800显卡 浅析:NVIDA GPU卡SXM和PCIe之间的差异性 原来SXM类型的显卡比PCIex类型显卡性能要高.PCIE版本是通用接口, ...
- 【转载】 日内瓦大学 & NeurIPS 2020 | 在强化学习中动态分配有限的内存资源
原文地址: https://hub.baai.ac.cn/view/4029 ======================================================== [论文标 ...
- 强化学习中子进程调用atari游戏是否受父进程中设置的随机种子影响
相关: python中numpy.random.seed设置随机种子是否影响子进程 ============================================ 代码: from ale_ ...
- [COCI2021-2022#6] Naboj 题解
前言 题目链接:洛谷. 题意简述 给定一张无向图,每条边有个哨兵,初始在边的中间.你可以把某个结点旁边的哨兵全部吸引或远离这个结点.给出最后每个哨兵在边的哪一端,请构造出一种可能的操作方案或报告无解. ...
- springboot代码自动生成
在项目开始阶段经常需要自动生成一批代码,如果使用了mybatis则可以使用mybatis plus就可以生成mybatis相关代码.不过经常项目中还有一些mvc代码需要生成,比如说前端代码.相关sql ...