【AtCoder】Beginner Contest 380-F.Exchange Game
题目链接
Problem Statement
Takahashi and Aoki will play a game using cards with numbers written on them.
Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1,…,AN in his hand, Aoki has M M M cards with numbers B 1 , … , B M B_1, \ldots, B_M B1,…,BM in his hand, and there are L L L cards with numbers C 1 , … , C L C_1, \ldots, C_L C1,…,CL on the table.
Throughout the game, both Takahashi and Aoki know all the numbers on all the cards, including the opponent’s hand.
Starting with Takahashi, they take turns performing the following action:
- Choose one card from his hand and put it on the table. Then, if there is a card on the table with a number less than the number on the card he just played, he may take one such card from the table into his hand.
The player who cannot make a move first loses, and the other player wins. Determine who wins if both players play optimally.
It can be proved that the game always ends in a finite number of moves.
中文题意
问题陈述
高桥和青木将用写有数字的卡片玩一个游戏。
最初,高桥手中有 N N N 张写有数字 A 1 , … , A N A_1, \ldots, A_N A1,…,AN 的纸牌,青木手中有 M M M 张写有数字 B 1 , … , B M B_1, \ldots, B_M B1,…,BM 的纸牌,桌上有 L L L 张写有数字 C 1 , … , C L C_1, \ldots, C_L C1,…,CL 的纸牌。
在整个游戏过程中,高桥和青木都知道所有牌上的所有数字,包括对手手中的牌。
从高桥开始,他们轮流进行以下操作:
- 从自己手中选择一张牌放在桌上。然后,如果桌上有一张牌的数字小于他刚刚打出的牌上的数字,他可以从桌上拿一张这样的牌放入自己的手牌中。
不能先出牌的一方输,另一方赢。如果双方都以最佳方式出牌,谁会赢?
可以证明游戏总是在有限步数内结束。
Constraints
- 1 ≤ N , M , L 1 \leq N, M, L 1≤N,M,L
- N + M + L ≤ 12 N + M + L \leq 12 N+M+L≤12
- 1 ≤ A i , B i , C i ≤ 1 0 9 1 \leq A_i, B_i, C_i \leq 10^9 1≤Ai,Bi,Ci≤109
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N N N M M M L L L
A 1 A_1 A1 … \ldots … A N A_N AN
B 1 B_1 B1 … \ldots … B M B_M BM
C 1 C_1 C1 … \ldots … C L C_L CL
Output
Print Takahashi if Takahashi wins, and Aoki if Aoki wins.
Sample Input 1
1 1 2
2
4
1 3
Sample Output 1
Aoki
The game may proceed as follows (not necessarily optimal moves):
- Takahashi plays 2 2 2 from his hand to the table, and takes 1 1 1 from the table into his hand. Now, Takahashi’s hand is ( 1 ) (1) (1), Aoki’s hand is ( 4 ) (4) (4), and the table cards are ( 2 , 3 ) (2,3) (2,3).
- Aoki plays 4 4 4 from his hand to the table, and takes 2 2 2 into his hand. Now, Takahashi’s hand is ( 1 ) (1) (1), Aoki’s hand is ( 2 ) (2) (2), and the table cards are ( 3 , 4 ) (3,4) (3,4).
- Takahashi plays 1 1 1 from his hand to the table. Now, Takahashi’s hand is ( ) () (), Aoki’s hand is ( 2 ) (2) (2), and the table cards are ( 1 , 3 , 4 ) (1,3,4) (1,3,4).
- Aoki plays 2 2 2 from his hand to the table. Now, Takahashi’s hand is ( ) () (), Aoki’s hand is ( ) () (), and the table cards are ( 1 , 2 , 3 , 4 ) (1,2,3,4) (1,2,3,4).
- Takahashi cannot make a move and loses; Aoki wins.
Sample Input 2
4 4 4
98 98765 987654 987654321
987 9876 9876543 98765432
123 12345 1234567 123456789
Sample Output 2
Takahashi
Sample Input 3
1 1 8
10
10
1 2 3 4 5 6 7 8
Sample Output 3
Aoki
解法
游戏的状态可以由当前玩家和每张牌的所有者(高桥的、青木的或桌上的)来表示,总共有 2 × 3 N + M + L 2\times 3^{N+M+L} 2×3N+M+L 种状态。
每走一步,两个人手中的牌上的数字之和就会减少,意味着我们永远不会两次回到相同的状态。因此,我们可以通过记忆递归法找到答案,即检查哪位棋手总是在每个状态下获胜。
更具体地说,如果一个点是必败的点,那么无论下一步怎么走,只能走到对方的必胜点;如果一个点是必胜点,无论怎么走,只能走到对方的必败点。这可以自然地表达为一个递归函数,并且可以记忆。
在 S = N + M + L S=N+M+L S=N+M+L 中,有 O ( 3 S ) O(3^S) O(3S) 个状态和 O ( S 2 ) O(S^2) O(S2) 个转换,因此总共用了 O ( 3 S S 2 ) O(3^S S^2) O(3SS2) 个时间来解决这个问题。
#include <bits/stdc++.h>
using namespace std;
int main(){int N, M, L;cin >> N >> M >> L;vector<int> A(N + M + L);for (int i = 0; i < N + M + L; i++){cin >> A[i];}int S = N + M + L;vector<int> T(S + 1);T[0] = 1;for (int i = 0; i < S; i++){T[i + 1] = T[i] * 3;}auto get = [&](int x, int i){return x / T[i] % 3;};vector<vector<bool>> used(2, vector<bool>(T[S], false));vector<vector<bool>> dp(2, vector<bool>(T[S], false));auto dfs = [&](auto dfs, int t, int s) -> bool {if (!used[t][s]){for (int i = 0; i < S; i++){if (get(s, i) == t){int s2 = s - T[i] * t + T[i] * 2;if (!dfs(dfs, t ^ 1, s2)){dp[t][s] = true;}for (int j = 0; j < S; j++){if (A[j] < A[i] && get(s, j) == 2){int s3 = s2 - T[j] * 2 + T[j] * t;if (!dfs(dfs, t ^ 1, s3)){dp[t][s] = true;}}}}}used[t][s] = true;}return dp[t][s];};int C = 0;for (int i = N; i < N + M; i++){C += T[i];}for (int i = N + M; i < S; i++){C += T[i] * 2;}if (dfs(dfs, 0, C)){cout << "Takahashi" << endl;} else {cout << "Aoki" << endl;}
}
相关文章:
【AtCoder】Beginner Contest 380-F.Exchange Game
题目链接 Problem Statement Takahashi and Aoki will play a game using cards with numbers written on them. Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1,…,AN in his hand, Aoki has M M M cards with numbers B …...
30. 并发编程
一、什么是多任务 如果一个操作系统上同时运行了多个程序,那么称这个操作系统就是 多任务的操作系统,例如:Windows、Mac、Android、IOS、Harmony 等。如果是一个程序,它可以同时执行多个事情,那么就称为 多任务的程序。…...
【包教包会】CocosCreator3.x框架——带翻页特效的场景切换
一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压,导入cocos creator(版本3.8.2),可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面,无法实现页面特效。…...
k8s上面的Redis集群链接不上master的解决办法
问题描述 之前在k8s上面部署了一台node,然后创建了6个redis的pod,构建了一个redis的集群,正常运行。 最近添加了一台slave node,然后把其中的几个redis的pod调度到了slave node上面,结果集群就起不来了,…...
<项目代码>YOLOv8 瞳孔识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
网络编程-002-UDP通信
1.UDP通信的简单介绍 1.1不需要通信握手,无需维持连接,网络带宽需求较小,而实时性要求高 1.2 包大小有限制,不发大于路径MTU的数据包 1.3容易丢包 1.4 可以实现一对多,多对多 2.客户端与服务端=发送端与接收端 代码框架 收数据方一般都是客户端/接收端 3.头文件 #i…...
MySQL更换瀚高语法更换
MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后,一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…...
Object.prototype.hasOwnProperty.call(item, key) 作用与用途
在 JavaScript 中,Object.prototype.hasOwnProperty.call(item, key) 是一种检查对象 item 是否具有特定属性 key 作为自身的属性(而不是继承自原型链)的方法。这种调用方式是安全的,特别是在处理可能被修改过原型链的对象时。 解…...
DNS的10种资源记录
前言 在DNS(域名系统)中,常见的资源记录(Resource Records, RR)用于存储域名与IP地址、邮件服务器等网络资源之间的映射关系。以下是几种常见的DNS资源记录: 1. A记录(Address Record…...
【数据分享】1981-2024年我国逐日最低气温栅格数据(免费获取)
气象数据一直是一个价值很高的数据,它被广泛用于各个领域的研究当中。之前我们分享过来源于美国国家海洋和大气管理局(NOAA)下设的国家环境信息中心(NCEI)发布的1929-2024年全球站点的逐日最低气温数据(可查看之前的文章获悉详情&…...
Kafka进阶_1.生产消息
文章目录 一、Controller选举二、生产消息2.1、创建待发送数据2.2、创建生产者对象,发送数据2.3、发送回调2.3.1、异步发送2.3.2、同步发送 2.4、拦截器2.5、序列化器2.6、分区器2.7、消息可靠性2.7.1、acks 02.7.2、acks 1(默认)2.7.3、acks -1或all 2.8、部分重…...
百度世界2024:智能体引领AI应用新纪元
在近日盛大举行的百度世界2024大会上,百度创始人李彦宏以一场题为“文心一言”的精彩演讲,再次将全球科技界的目光聚焦于人工智能(AI)的无限可能。作为一名科技自媒体,我深感这场演讲不仅是对百度AI技术实力的一次全面…...
NIST 发布后量子密码学转型战略草案
美国国家标准与技术研究所 (NIST) 发布了其初步战略草案,即内部报告 (IR) 8547,标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布,开放…...
同向双指针
长度最小的子数组 力扣209 #define MIN(a, b) ((b) < (a) ? (b) : (a)) int minSubArrayLen(int target, int* nums, int numsSize) {int ans numsSize 1;int left 0;int right 0;int sum 0;for (right 0; right < numsSize; right){sum nums[right];while (su…...
小鹏汽车大数据面试题及参考答案
抽象类与接口的区别是什么? 抽象类是一种不能被实例化的类,它可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法,必须在子类中被实现。抽象类主要用于为一组相关的类提供一个通用的模板,子类可以继承抽象类并实现其中的抽象方法,也可以使用抽象类中的非抽象方法…...
华为再掀技术革新!超薄膜天线设计路由器首发!
随着Wi-Fi技术的不断进步,新一代的Wi-Fi 7路由器凭借其高速率、低延迟、更稳定的性能受到了广泛关注。它能够更好地满足现代家庭对网络性能的高要求,带来更加流畅、高效的网络体验。9月24日,华为在其秋季全场景新品发布会上推出了全新Wi-Fi 7…...
CREO TOOLKIT二次开发学习之字符转换
在tk中,有很多都是可以直接强制转换的,本文章只列举字符相关的转换。 不建议使用tk官方手册的函数进行转换,因此下文均以原生c进行举例。 //double转wstring wstring a; double b; ato_wstring(b);//wstring转double wstring wstr L"…...
vmware虚拟机安装Windows11提示电脑不符合要求?
vmware虚拟机安装Win11提示电脑不符合要求? 安装问题能进入选择语言界面,请看这不能进入选择语言界面,请看这 安装问题 Vmware虚拟机安装Windows11时提示电脑不符合要求,如下: 修改了虚拟机的硬件配置还是不行&#x…...
【金融风控项目-08】:特征构造
文章目录 1.数据准备1.1 风控建模特征数据1.2 人行征信数据1.3 据之间的内在逻辑 2 样本设计和特征框架2.1 定义观察期样本2.2 数据EDA(Explore Data Analysis)2.3 梳理特征框架 3 特征构造3.1 静态信息和时间截面特征3.2 未来信息问题3.2.1 未来信息案例3.2.2 时间序列特征的未…...
计算机网络 (2)计算机网络的类别
计算机网络的类别繁多,根据不同的分类原则,可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网(LAN): 定义:局域网是一种在小区域内使用的,由多台计算机组成的网络。覆盖范围&#…...
OpenManus-RL:基于强化学习优化大语言模型智能体决策的完整框架
1. 项目概述与核心价值如果你正在关注大语言模型智能体领域,尤其是如何让模型从“会聊天”进化到“会做事”,那么OpenManus-RL这个项目绝对值得你投入时间研究。它不是一个简单的工具库,而是一个由UIUC-Ulab和MetaGPT团队联合发起的、以直播形…...
GPU加速网络爬虫:OpenCL异构计算在数据采集中的实践
1. 项目概述:一个面向硬件加速的开源抓取工具包最近在折腾一些数据采集和自动化任务时,我常常遇到一个瓶颈:当需要处理海量网页、进行高频次请求或者解析复杂的动态内容时,传统的基于CPU的抓取框架(比如Scrapy、Reques…...
基于多平台行为数据构建AI Agent深度用户画像:Know Your Owner项目解析
1. 项目概述:从“你是谁”到“我懂你”的智能跨越在AI助手日益普及的今天,我们面临着一个核心矛盾:用户期望获得高度个性化的服务,而AI助手在初次接触时却对用户一无所知。传统的解决方案,比如让用户填写冗长的问卷&am…...
2026中小企业OA软件排行榜TOP10(精简版)
2026年,中小企业数字化转型进入深水区,OA软件作为办公协同核心工具,是企业提升效率、规范流程、降本增效的关键支撑。随着SaaS模式普及、AI技术深度应用及信创政策落地,OA市场呈现“头部生态下沉、专业工具崛起、性价比为王”的格…...
记一次ubuntu 22.04安装旧版 MongoDB 4.2
22.04版本比较新,由于mongodb 2.4太老了,安装会遇到问题。特此记录1. 下载mongodb包wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.24.tgz2. 解压到当前目录sudo tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.2.24.tgz3.…...
Yaskawa JACP-317800输入输出模块
安川JACP-317800是一款高性能逻辑输入输出模块,隶属于安川CP-317系列PLC系统,专为工业自动化领域的数字信号采集与控制而设计。产品特点:产品类型为逻辑输入输出模块,作为PLC与现场设备之间的信号接口模块重量仅0.3公斤࿰…...
Resolink MCP:基于MCP协议与Playwright的AI浏览器自动化实践
1. 项目概述:当AI助手学会“动手”——Resolink MCP的浏览器自动化革命如果你和我一样,每天在Cursor、Claude这类AI编程助手的陪伴下写代码,那你一定遇到过这样的场景:你正和AI热烈讨论一个技术方案,突然需要去浏览器里…...
Dify数据库查询插件:让AI应用轻松连接业务数据的实战指南
1. 项目概述与核心价值 如果你正在使用 Dify 构建企业级 AI 应用,并且经常需要让 AI 助手去查询数据库里的数据——比如让 LLM 帮你分析销售报表、查找用户信息或者生成业务洞察——那么你很可能遇到过这样的痛点:Dify 本身并不直接支持数据库连接。你需…...
图解人工智能(10)人工智能的发展历程
人工智能自20世纪50年代发展至今,经历了若干次高潮和低谷。每到陷入困境的时候,总有一些科学家勇敢地打破传统思想的束缚,创造出新理论、新方法,使人工智能重现生机。例如,在符号主义陷入危机的时候,费根鲍…...
YOLO26改进| downsample |网络深层多分支互补鲁棒下采样模块
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO26的下采样替换为DRFD来提取特征。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修…...
