题目:戳这里

题意:起点(0,0),终点(n,m),走k步,可以走8个方向,问能不能走到,能走到的话最多能走多少个斜步。

解题思路:起点是固定的,我们主要分析终点。题目要求走最多的斜步,斜步很明显有一个性质就是不会改变n和m的相对奇偶性。就是走斜步的话,n和m要么+1要么-1,如果一开始n和m奇偶性不同,那么只走斜步最后奇偶性怎么都不会相同。因为起点始终是(0,0),所以如果终点(n,m)的n和m奇偶性不同,那么肯定要走一个直步,而且只需要走一次直步。为什么只需要一次直步呢,我们可以随便画一条斜线,可以发现如果给一次走直步的机会,那么这条斜线上任意点的上下左右我们都可以到达。

也就是说,足够的斜步,可以让我们从(0,0)到达所有n与m奇偶性相同的点。再加上一个直步的话,就可以到达所有点了。而如果(n,m)本身奇偶性相同,但是与k不同,那么就是从起点到达(n,m)后,如果只走斜步,是没法刚好返回终点的。此时最优的方法就是把一个斜步化成两个直步,用来改变k与(n,m)的奇偶关系。

总结起来就是当n与m奇偶性不同的时候,--n,--k,否则--n,--m,k-=2。

判断k>=n是否成立,不成立说明走不到,成立直接输出k。

附ac代码:

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn = 1e3 + 10;
4 typedef long long ll;
5 int nu[maxn][11];
6 int ans[2][555];
7 void sp(ll *a, ll *b)
8 {
9 *a = *a ^ *b;
10 *b = *a ^ *b;
11 *a = *a ^ *b;
12 }
13 int main()
14 {
15 int q;
16 scanf("%d", &q);
17 ll n, m, k;
18 while(q--)
19 {
20 scanf("%lld %lld %lld", &n, &m, &k);
21 if(n < m)
22 {
23 sp(&n, &m);
24 }
25 // printf("%lld %lld\n", n, m);
26 if((n&1) != (m&1))
27 {
28 --n;
29 --k;
30 }
31 else if((n&1) != (k&1))
32 {
33 n -= 1;
34 m -= 1;
35 k -= 2;
36 }
37 if(k >= n)
38 {
39 printf("%lld\n", k);
40 }
41 else
42 {
43 puts("-1");
44 }
45 }
46 return 0;
47 }

codeforces 1036B - Diagonal Walking v.2【思维+构造】的更多相关文章

  1. CF 1036B Diagonal Walking v.2——思路

    题目:http://codeforces.com/contest/1036/problem/B 比赛时只能想出不合法的情况还有走到终点附近的方式. 设n<m,不合法就是m<k.走到终点方式 ...

  2. Diagonal Walking v.2 CodeForces - 1036B (思维,贪心)

    Diagonal Walking v.2 CodeForces - 1036B Mikhail walks on a Cartesian plane. He starts at the point ( ...

  3. Codeforces Round #501 (Div. 3) D. Walking Between Houses (思维,构造)

    题意:一共有\(n\)个房子,你需要访问\(k\)次,每次访问的距离是\(|x-y|\),每次都不能停留,问是否能使访问的总距离为\(s\),若能,输出\(YES\)和每次访问的房屋,反正输出\(NO ...

  4. CF 1036 B Diagonal Walking v.2 —— 思路

    题目:http://codeforces.com/contest/1036/problem/B 题意:从 (0,0) 走到 (n,m),每一步可以向八个方向走一格,问恰好走 k 步能否到达,能到达则输 ...

  5. B. Diagonal Walking v.2

    链接 [https://i.cnblogs.com/EditPosts.aspx?opt=1] 题意 二维平面从原点出发k步,要到达的点(x,y),每个位置可以往8个方位移动,问到达目的地最多可以走多 ...

  6. hdu4671 思维构造

    pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671 Problem Description Makomuno has N ...

  7. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

  8. A Mist of Florescence CodeForces - 989C(思维构造)

    题意: 让你构造一个图,使得A,B,C,D的个数为给定的个数,上下左右连通的算一个. 哎呀 看看代码就懂了..emm..很好懂的 #include <bits/stdc++.h> usin ...

  9. Educational Codeforces Round 53C(二分,思维|构造)

    #include<bits/stdc++.h>using namespace std;const int N=1e6+6;int x[N],y[N];int sx,sy,n;char s[ ...

随机推荐

  1. Kubernetes 开船记-脚踏两只船:用 master 服务器镜像克隆出新集群

    自从2020年2月23日 园子全站登船 之后,我们一边感叹"不上船不知道,一上船吓一跳" -- kubernetes 比 docker swarm 强大太多,一边有一个杞人忧天的担 ...

  2. SAP 摘录数据集

    要在报表中创建并填充摘录数据集,需要执行三步骤:1.将要在摘录数据集中使用的记录类型定义为字段组FIELD-GROUPS该语句定义了字段组,字段组可以将几个字段组合到一个名称下,字段组不为字段保留存储 ...

  3. Graph Explore的使用介绍

    我在Graph API开发中用的最多的测试工具就是Graph Explore,这个是微软开发的网页版的Graph API的测试工具,能满足我大部分需求. 访问网址是:Graph Explorer - ...

  4. Redis-第五章节-8种数据类型

    目录 一.Redis对key的操作 二.五种数据类型 String类型 List(集合) Set(集合) Hash(哈希) Zset(有序集合) 三.三种特殊数据类型 geospatial(地理位置) ...

  5. win 10下Apache和PHP的安装配置

    一.下载Apache 官网下载:https://httpd.apache.org/ 或者百度网盘链接:https://pan.baidu.com/s/17zVFNSfzzwDgFti_fboUSA 提 ...

  6. JAVA中关于基本数据和引用数据参数传递过程

    基本数据和引用数据参数传递过程 案例1:判断程序的输出结果 class Demo{ public static void main(String[] atgs){ int x =4; show(x); ...

  7. 博客-livevent-stl-cpp-nginx

    https://blog.csdn.net/move_now/article/category/6420121

  8. 非Windows系统 如何解压带中文密码和中文文件名的zip压缩文件

    数据科学交流群,群号:189158789 ,欢迎各位对数据科学感兴趣的小伙伴的加入! 一.安装unar软件包: Linux(Debian系列): apt install unarLinux(RedHa ...

  9. Java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json

    对象转换为Json 对象bean转换为Json List集合转换为Json 对象数组转换为Json Map集合转换为Json Set集合转为Json 字符串转换为Json 把Java对常用的一些数据转 ...

  10. SpringBoot整合JavaMail发送邮件

    JavaMail是SUN提供给广大Java开发人员的一款邮件发送和接受的一款开源类库,支持常用的邮件协议,如:SMTP.POP3.IMAP,开发人员使用JavaMail编写邮件程序时,不再需要考虑底层 ...