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来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...
随机推荐
- Java maven反应堆构建学习实践
Java maven反应堆构建学习实践 实践环境 Apache Maven 3.0.5 (Red Hat 3.0.5-17) 应用示例 示例项目结构 maven示例项目组织结构如下 maven-stu ...
- gitbook 入门教程之比较代码块差异 diff 插件
在 markdown 文档中显示代码之间的差异的 Gitbook 插件 English | 中文 主页 Github : https://snowdreams1006.github.io/gitboo ...
- vue codemirror sql编辑器功能 可自定义提醒(关键字,库名,表名),高亮,主题
工作中再一次需要开发sql编辑器,优化上篇文章内容 https://www.cnblogs.com/Lu-Lu/p/14388888.html 本次功能是tab页打开多个sql编辑器,效果图: 安装: ...
- 手把手教你本地运行Meta最新大模型:Llama3.1,可是它说自己是ChatGPT?
就在昨晚,Meta发布了可以与OpenAI掰手腕的最新开源大模型:Llama 3.1. 该模型共有三个版本: 8B 70B 405B 对于这次发布,Meta已经在超过150个涵盖广泛语言范围的基准数据 ...
- 关于MultipartFile
首先,他来自spring框架,用于处理文件上传的问题 一般来讲,这个接口主要是实现以表单形式上传文件的功能 常用方法: getOriginalFileName:获取文件名+拓展名 getContent ...
- Activity的创建
Activity的创建: 1.layout内写入相关代码 此处为显示的页面 2.Java内创建相关类写入代码 3.在清单内写入 快捷方法:直接完成上面步骤 layout: match_parent// ...
- 【Vue】 签名组件
一.需求背景: 检查业务,检查完成后,执行人需要签字证明检查完成 二.实现效果: 三.技术实现 通过canvas转换成blob对象,可以上传到文件服务,或者是下载另存为到本地磁盘 注意重点,canva ...
- 不务正业的再次胡想——chatgpt在“智能辅助编程”外的另一个可能场景"智能论文写作辅助”
在chatgpt4出来后震惊了很多人,但是很多人也觉得好像用处不大:可以说chatgpt4确实更加智能了,在语言对话上更加的智能,很多情况下已经很难分辨出这货是个机器人,但是现在这东西好像确实也没有太 ...
- 【转载】sun的rpc ——rpcbind(nfs文件系统中的rpc)
原文地址: https://blog.csdn.net/wangpeng138375/article/details/8169071 ================================= ...
- 【转载】failed to open /dev/dri/renderd128 permission denied
原文地址: https://juejin.cn/s/failed%20to%20open%20%2Fdev%2Fdri%2Frenderd128%20permission%20denied ===== ...