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

【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 1N,M,L
  • N + M + L ≤ 12 N + M + L \leq 12 N+M+L12
  • 1 ≤ A i , B i , C i ≤ 1 0 9 1 \leq A_i, B_i, C_i \leq 10^9 1Ai,Bi,Ci109
  • 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. 并发编程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…...

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…...

k8s上面的Redis集群链接不上master的解决办法

问题描述 之前在k8s上面部署了一台node&#xff0c;然后创建了6个redis的pod&#xff0c;构建了一个redis的集群&#xff0c;正常运行。 最近添加了一台slave node&#xff0c;然后把其中的几个redis的pod调度到了slave node上面&#xff0c;结果集群就起不来了&#xff0c;…...

<项目代码>YOLOv8 瞳孔识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

网络编程-002-UDP通信

1.UDP通信的简单介绍 1.1不需要通信握手,无需维持连接,网络带宽需求较小,而实时性要求高 1.2 包大小有限制,不发大于路径MTU的数据包 1.3容易丢包 1.4 可以实现一对多,多对多 2.客户端与服务端=发送端与接收端 代码框架 收数据方一般都是客户端/接收端 3.头文件 #i…...

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后&#xff0c;一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…...

Object.prototype.hasOwnProperty.call(item, key) 作用与用途

在 JavaScript 中&#xff0c;Object.prototype.hasOwnProperty.call(item, key) 是一种检查对象 item 是否具有特定属性 key 作为自身的属性&#xff08;而不是继承自原型链&#xff09;的方法。这种调用方式是安全的&#xff0c;特别是在处理可能被修改过原型链的对象时。 解…...

DNS的10种资源记录

前言 在DNS&#xff08;域名系统&#xff09;中&#xff0c;常见的资源记录&#xff08;Resource Records, RR&#xff09;用于存储域名与IP地址、邮件服务器等网络资源之间的映射关系。以下是几种常见的DNS资源记录&#xff1a; 1. A记录&#xff08;Address Record&#xf…...

【数据分享】1981-2024年我国逐日最低气温栅格数据(免费获取)

气象数据一直是一个价值很高的数据&#xff0c;它被广泛用于各个领域的研究当中。之前我们分享过来源于美国国家海洋和大气管理局&#xff08;NOAA&#xff09;下设的国家环境信息中心(NCEI)发布的1929-2024年全球站点的逐日最低气温数据&#xff08;可查看之前的文章获悉详情&…...

Kafka进阶_1.生产消息

文章目录 一、Controller选举二、生产消息2.1、创建待发送数据2.2、创建生产者对象&#xff0c;发送数据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大会上&#xff0c;百度创始人李彦宏以一场题为“文心一言”的精彩演讲&#xff0c;再次将全球科技界的目光聚焦于人工智能&#xff08;AI&#xff09;的无限可能。作为一名科技自媒体&#xff0c;我深感这场演讲不仅是对百度AI技术实力的一次全面…...

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…...

同向双指针

长度最小的子数组 力扣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技术的不断进步&#xff0c;新一代的Wi-Fi 7路由器凭借其高速率、低延迟、更稳定的性能受到了广泛关注。它能够更好地满足现代家庭对网络性能的高要求&#xff0c;带来更加流畅、高效的网络体验。9月24日&#xff0c;华为在其秋季全场景新品发布会上推出了全新Wi-Fi 7…...

CREO TOOLKIT二次开发学习之字符转换

在tk中&#xff0c;有很多都是可以直接强制转换的&#xff0c;本文章只列举字符相关的转换。 不建议使用tk官方手册的函数进行转换&#xff0c;因此下文均以原生c进行举例。 //double转wstring wstring a; double b; ato_wstring(b);//wstring转double wstring wstr L"…...

vmware虚拟机安装Windows11提示电脑不符合要求?

vmware虚拟机安装Win11提示电脑不符合要求&#xff1f; 安装问题能进入选择语言界面&#xff0c;请看这不能进入选择语言界面&#xff0c;请看这 安装问题 Vmware虚拟机安装Windows11时提示电脑不符合要求&#xff0c;如下&#xff1a; 修改了虚拟机的硬件配置还是不行&#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)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...