codeforces Round 885(div 2) A
翻译:
A. 维卡和她的朋友们
每个测试的时间限制为1秒
每个测试的内存限制为256兆字节
输入:标准输入
输出:标准输出
维卡和她的朋友们去了一家购物中心,可以将其表示为一个边长为n和m的矩形网格。每个房间都有坐标(a,b),其中1≤a≤n,1≤b≤m。因此,我们称坐标为(c,d)的大厅为它的邻居,如果|a−c|+|b−d|=1。
维卡厌倦了空洞的时尚谈话,决定悄悄溜走。但由于她还没有机会去过其中的一家店铺,她不想离开购物中心。过了一会儿,她的朋友们注意到维卡的失踪,并开始寻找她。
目前,维卡位于坐标为(x,y)的房间,她的k个朋友分别位于坐标为(x1,y1),(x2,y2),...,(xk,yk)的房间中。坐标可以重叠。请注意,所有女孩都必须移动到相邻的房间。
每一分钟,首先维卡移动到她选择的任意一侧的相邻房间,然后每个朋友(看到维卡的选择)也选择一个相邻的房间移动到。
如果在每一分钟结束时(即在所有女孩都移动到相邻房间后),至少有一个朋友与维卡在同一个房间,她就会被捉住,其他朋友也会被叫住。
告诉我们,维卡能否永远逃脱她烦人的朋友,还是她必须在某个时候继续听空洞的时尚谈话?
输入
每个测试由多个测试用例组成。第一行包含一个整数t(1≤t≤100)- 测试用例的数量。接下来是各个测试用例的描述。
每个测试用例的第一行包含三个整数n,m,k(1≤n,m,k≤100)- 购物中心的大小和维卡的朋友数量。
每个测试用例的第二行包含一对整数x和y(1≤x≤n,1≤y≤m)- 维卡所在房间的坐标。
每个测试用例的接下来的k行中,每行包含一对整数xi和yi(1≤xi≤n,1≤yi≤m)- 第i个朋友所在房间的坐标。
输出
对于每个测试用例,如果维卡能够永远逃脱她的朋友,请输出"YES",否则输出"NO"。
你可以以任何大小写形式输出每个字母。例如,字符串"yEs","yes","Yes"和"YES"都将被接受为肯定答案。
样例
input
6 2 2 1 1 1 1 2 2 2 2 1 1 2 2 2 2 1 2 1 1 1 1 2 5 5 4 3 3 1 1 1 5 5 1 5 5 2 2 2 1 1 2 1 1 2 3 4 1 1 2 3 3
output
YES NO YES NO YES YES
正确的做题思路:
1.最简单的的情况
即当V和朋友紧挨着且V先走V必赢,当V和朋友紧挨着且朋友先走V必输,有点类似博弈论
2.控制变量
两点横方向上距离为1,纵方向上距离也为1,此时必输
两点横方向上距离为2,纵方向上距离也为1,此时必赢
两点横方向上距离为3,纵方向上距离也为1,此时必输
3.得出结论
横距离加总距离若为偶数必输,为奇数必赢
代码如下:
#include <bits/stdc++.h> #include <iostream> #include <cstdio> using namespace std; #define int long long int n, m, t, k, ans; int x, y; int xx, yy; signed main() { cin >> t; while (t--) { cin >> n >> m >> k; cin >> x >> y; int flag = 1; for (int i = 0; i < k; i++) { cin >> xx >> yy; if ((abs(x - xx) + abs(y - yy)) % 2 == 0) { flag = 0; } } if (flag == 1) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
总结:这道题还是一道很典型的思维题,很符合cf(div 2)A题的难度,总的来说还是要掌握一个正确的思维方式,只要思路正确了就能很轻松的把题目做出来,做题前先手动模拟几个样例,由特殊的简单的样例来推导复杂的一般的样例,最终得到一个具有普适性的结论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理