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

问题 C: 为美好的世界献上爆炎(博弈论)

题目描述

在红魔村中,悠悠向惠惠发起了挑战。

桌上有 n 枚硬币,两人轮流拿硬币。每次可以在区间 [l, r] 中选择一个数字 x 然后拿走 x 枚硬币,若一方无法再拿取则输掉了游戏,由惠惠先手开始拿硬币。

惠惠和悠悠都是聪明的,现在惠惠想在游戏开始前,请你帮忙判断她是否能够必胜,若她可以必胜则会按照必胜策略和悠悠进行游戏,若不能必胜她就只好作弊来战胜悠悠了。

游戏一共会进行 t 局,每局游戏都需要你判断胜负。

输入

第一行包含一个正整数 t ,表示有 t 局游戏。

接下来 t 行每行三个正整数 n, l, r ,表示有硬币数量 n 和区间 [l,r] 。

输出

输出 t 行,每行输出 yes 或 no,yes 表示本局惠惠可以必胜,no 表示本局惠惠不可以必胜。

样例输入 Copy
2
6 1 4
10 3 5
样例输出 Copy
yes
no
提示

对于 30% 的数据,满足 l = 1 。

对于另 20% 的数据,满足 n≤500, t≤ 500 。

对于另 20% 的数据,满足 n <= 5000, t≤ 5000 。

对于 100% 的数据,满足 1≤ l≤ r≤ n <= 109, t≤ 105 。

deepsleep答案:

核心思路是分析游戏的 必胜态必败态 ,并利用周期性优化计算(因为 n 很大,无法动态规划)。 

必败:当前玩家无法行动,或无论怎么行动,对手都能获胜。

必胜:当前玩家可以强制获胜。

  • 当 l ≤ n ≤ r 时,玩家可以一次性取完所有硬币,直接获胜,是必胜态。

  • 当 n > r 时,玩家可以取 x 枚(x ∈ [l, r]),使剩余硬币数为 n - x。目标是将对手逼入必败态。

  • 游戏状态(赢/输)以周期 s = l + r 重复。

必败的条件n < l 或 n % (l + r) < l

必胜的条件n ≥ l 且不满足必败态条件。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t,n,l,r;
int main(){scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&n,&l,&r);if(n<=r){printf("yes\n");continue;}n%=(l+r);if(n<l)printf("no\n");else printf("yes\n");	}return 0;
}

http://www.xdnf.cn/news/1100989.html

相关文章:

  • 如何在 Windows 10 上安装设置 Apache Kafka
  • 聊聊AI大模型的上下文工程(Context Engineering)
  • 你见过的最差的程序员是怎样的?
  • Redis底层数据结构
  • CSS3的核心功能介绍及实战使用示例
  • 提示工程:解锁大模型潜力的核心密码
  • 库存订单管理系统:3月份开源项目汇总
  • linux中cmake编译项目
  • Django母婴商城项目实践(二)
  • 1.1.2 运算符与表达式——AI教你学Django
  • 3.检查函数 if (!CheckStart()) return 的妙用 C#例子
  • Vue3 Pinia
  • php中调用对象的方法可以使用array($object, ‘methodName‘)?
  • DSPy:用编程思维驯服大模型的新范式
  • 2025年主流数据库连接池推荐:从原理到场景的深度解析
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 传输层协议UDP原理
  • 二分查找1
  • JavaScript加强篇——第五章 DOM节点(加强)与BOM
  • 企业培训笔记:Vue3前端框架配置
  • 销售数据可视化分析项目
  • 专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载
  • 如何选择数据可视化工具?从设计效率到图表表现力全解读
  • Spring之我见-Spring循环依赖为啥是三级缓存?
  • uniApp实战五:自定义组件实现便捷选择
  • Hadoop 用户入门指南:驾驭大数据的力量
  • 如何将文件从OPPO手机传输到电脑
  • crmeb多门店对接拉卡拉支付小程序聚合收银台集成全流程详解
  • UniApp 生命周期详解:从启动到销毁的完整指南
  • WHQL认证失败怎么办?企业如何高效申请