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来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...
随机推荐
- 如何正确使用@Bulider与<T>返回数据
@Data @ToString @Builder @AllArgsConstructor public class PageResult<T> implements Serializabl ...
- python中的字符串和列表
name="1" name='1' name="""1""""" name='''1''' #都为正 ...
- 【C++】01
第一个C++程序 #include <iostream> // 使用C++提供的流库 using namespace std; // 使用命名空间,为什么必须是std? int main( ...
- 【CentOS】 8版本 Cannot update read-only repo 问题
GUI界面应用市场无法访问 https://blog.csdn.net/hm0406120201/article/details/104553205/
- gpg 密钥的导入、导出
参考: gpg 密钥生成.导入.导出.自动输入密码 How do I delete secret subkeys correctly? 注意: 本文不对GPG的操作做详细介绍,有深入了解者自行参考:g ...
- 【转载】 自然梯度法(Natural Gradient)
原文地址: https://blog.csdn.net/philthinker/article/details/80615122 ----------------------------------- ...
- 国产CPU,国产操作系统UOS——零刻LZX迷你主机 , 显卡驱动安装以及屏幕配置
看网上新闻发现了一款mini电脑--零刻LZX迷你主机 国产兆芯四核八线程 教学家用办公全能王8+256G 该款电脑使用的是国产CPU兆芯,以及国产操作系统UOS,由于价格还不贵就入手玩玩. 商品地址 ...
- 【转载】 DQN玩Atari游戏安装atari环境bug指南
版权声明:本文为CSDN博主「好程序不脱发」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/ningmengzh ...
- pytorch的显存释放机制torch.cuda.empty_cache()
参考: https://cloud.tencent.com/developer/article/1626387 据说在pytorch中使用torch.cuda.empty_cache()可以释放缓存空 ...
- 国产操作系统——银河麒麟V10 SP1使用小结
前几天看新闻国产操作系统银河麒麟有了新的更新于是上手搞了一个. ========================================================= 该系统自带驱动,其中 ...