当前位置: 首页 > article >正文

C会赢的!(牛客周赛 Round 58)

题目链接:

C-会赢的!_牛客周赛 Round 58 (nowcoder.com)

题目描述:

输入和输出描述:

样例输入:

3
1 1
1 0
-1 -1

样例输出:

NO
YES
PING

题目分析:

题目要求只能向下向右走,起点是(0, 0),因此先判断:x < 0 或者是y < 0就是平局了(大家都赢不了)。

在对应的区域里面的话,对一下情况进行讨论:

x == y

这种情况是(1, 1) 、(2, 2)、(3, 3)这一定是后手赢的。一共走的步数是2 * x或表示为2 * y(x和y相等),一定是个偶数,先手知道自己会输,那么他下的时候就想偏离航线,想平局,但是不行,后手知道自己要想赢的话,就要控制先手的航线,so后手会反着来。先手向右走,后手就会向下走,先手向下走,后手就会向右走。走着走着,后手就到达了目标区域了。

abs(x - y) == 1:

这个时候就是先手赢了,(a + a - 1)一定是个奇数,先手赢。这个和(x == y)这种情况是类似的,后手知道自己会输,但是先手会和后手反着来,你向右,我就向下,你向下,我就向右,尽力控制航道。大家走着走着就到达了终点了。

其他:

难办,大家都别办了。知道自己输的那个就会使劲偏离轨道,就不让你赢,大家都别赢了。

比如:终点是(1, 4),从(0, 0)到(1, 4)需要走1 + 4步,要是大家规规矩矩的话,是先手赢,但是后手不想让先手赢。后手就会极端的让x变大,也就是一直向x轴方向走,让x超过1,这样先手就回不去了。

代码:

#include<bits/stdc++.h>
using namespace std;

int main() {
	int t;
	cin >> t;
	while(t -- ) {
		int x, y;
		cin >> x >> y;
		if(x < 0 || y < 0 ) {
			cout << "PING" << endl;
		} else {
			int h = y;
			int l = x;
			if(h + l == 1 ) {
				cout << "YES" << endl;
			} else if(h == l) {// 反着来
				cout << "NO" << endl;
			} else {
                if(h - l == 1 || l - h == 1) {
                    cout << "YES" << endl;
                }else {
                    cout << "PING" << endl;
                }
			}
		}
	}
	return 0;
}

运行结果:


http://www.kler.cn/news/354456.html

相关文章:

  • 力反馈手套如何在VR培训解决方案中为用户提供沉浸式体验?
  • c++链式调用
  • 【css-在一个元素中设置font-size和实际渲染字体大小不一致】
  • CAT(Card Application Toolkit)- LSI
  • Jenkins整合Docker实现CICD自动化部署(若依项目)
  • ESP32-IDF USART 专题
  • 如何在Android中进行日志打印和调试?
  • 即时通讯增加kafka渠道
  • 基于workbox实现PWA预缓存能力
  • 11.9K Star!强大的 Web 爬虫工具 FireCrawl:为 AI 训练与数据提取提供全面支持
  • 【Linux】解读信号的本质&相关函数及指令的介绍
  • UI自动化测试 —— web端元素获取元素等待实践!
  • 国产游戏技术:迈向全球引领者的征途
  • 2.计算机网络_IP地址
  • React 探秘(一):fiber 架构
  • 自动驾驶系列—探索自动驾驶持续部署(CD)技术与最佳实践
  • UE5 猎户座漂浮小岛 01 资源 玩家角色
  • 从2.x到3.x:Spring Boot升级实战踩坑记录!
  • Go语言中的时间比较与时区处理
  • 利用Microsoft Entra Application Proxy在无公网IP条件下安全访问内网计算机