当前位置: 首页 > 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;由多台计算机组成的网络。覆盖范围&#…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...