Codeforces Round 114 (Div. 1) C. Wizards and Numbers(思维题 辗转相除+博弈 巴什博弈)

news2024/9/24 22:52:50

题目

t(t<=1e4)组询问,每次询问(a,b)(0<=a,b<=1e18),

不妨a<=b(a>b时需要交换两个数考虑)

①令b减去a的k次方(k>=1),要求减完之后b非负

②令b=b%a

当a和b之中至少有一个0时,无法再操作,不能再操作的人失败

问两人都客观操作,谁必胜

思路来源

https://www.cnblogs.com/qscqesze/p/5193592.html

题解

补远古场翻到卿学姐博客,泪目

如果只有第二种操作,那就是辗转相除

1. 对于子局面,如果子局面必败,那么当前局面必胜

2. 如果子局面必胜,那么当前局面不想输,只能用第一种操作去拖,

b>=a时,相当于有b/a(b/a个a)个石子,

先手和后手可以取1(1个a)枚,a枚(a个a),a^2,...

取到最后一个石子的人必败(即进入子局面的必胜态),问先手在这个拖的游戏里能否必胜

打表可知,当(b/a)%(a+1)为偶数时,先手必胜,(b/a)%(a+1)为奇数时,先手必败

一点证明

注意到:

1%(a+1)=1

a%(a+1)=a

(a^2)%(a+1)=1

(a^3)%(a+1)=a

...

先手必胜的情况

当(b/a)%(a+1)为偶数时,先手可以先取1个

此时(在模a+1意义下)后手如果取1个,先手就再取a个;

反之后手取a个,先手就再取1个

这样若干轮后,(b/a)起到了对(a+1)取模的效果,即当前剩余石子数不超过a,

并且先手在第一轮由于多取1个石子,此时必还剩奇数个石子,后手只能取一枚,

此后,二人只能一枚一枚的取,所以一定是后手取到最后一个石子,后手必败

后手必胜的情况

当(b/a)%(a+1)为奇数时,

(在模a+1意义下)先手如果开局取1个,后手可以取a个

先手如果开局取a个,后手可以取1个

这样若干轮后,(b/a)起到了对(a+1)取模的效果,

当前局面不足a+1且石子数仍为奇数

此后,先手和后手只能一枚一枚地取,且先手取到最后一枚,先手必败

其实就是,

先手必胜就是用第2、3步,第4、5步,...,去凑k+1的倍数

后手必胜就是用第1、2步,第3、4步,...,去凑k+1的倍数

其他理解方式,

(b/a)%(a+1)=1是先手必败态,

(b/a)%(a+1)为奇数总可以转移到(b/a)%(a+1)为偶数,

(b/a)%(a+1)为偶数总可以转移到(b/a)%(a+1)为奇数,

所以奇数必败,偶数必胜

代码

// Problem: C. Wizards and Numbers
// Contest: Codeforces - Codeforces Round 114 (Div. 1)
// URL: https://codeforces.com/contest/167/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define scll(a) scanf("%lld",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
int t;
ll a,b;
bool sol(ll a,ll b){
	if(a<b)swap(a,b);
	if(!b)return 0;
	ll x=sol(b,a%b);
	if(!x)return 1;
	ll w=a/b,y=w%(b+1);
	return y%2==0;
}
void sol(){
	scanf("%lld%lld",&a,&b);
	puts(sol(a,b)?"First":"Second");	
}
int main(){
	sci(t); // t=1
	while(t--){
		sol();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华媒舍:溯源媒体发稿,助推品牌快速突破

在当今残酷竞争的市场环境中&#xff0c;品牌的快速突破变成了公司发展的关键之一。溯源新闻媒体发稿作为一项强有力营销推广方式&#xff0c;为品牌快速建立名气、提升口碑品牌形象提供了重要适用。下面我们就详细介绍如何给品牌订制溯源新闻媒体发稿对策&#xff0c;并探讨其…

目标检测-One Stage-YOLOv8

文章目录 前言一、YOLOv8的网络结构和流程二、YOLOv8的创新点三、创新点详解CSP、C3和C2fTaskAlignedAssigner 正样本分配策略Distribution Focal Loss关闭 Mosiac 总结 前言 终于到了YOLO系列最新最火爆的网络–YOLOv8&#xff0c;前面YOLOv5中已经提到ultralytics团队集成了…

开源iMES工厂管家 - 安装部署指南

环境&#xff1a; 总览&#xff1a; 下载 node-v16.17.1-win-x64&#xff1a;Index of /download/release/v16.17.1/ 官网&#xff1a;https://nodejs.org/en/download 历史版本下载&#xff1a;Index of /download/release/ 绿色解压安装 node-v16.17.1-win-x64&#xff1a;…

LeetCode 每日一题 Day 44 || 哑节点去重

82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 示例 2&#x…

CSS 水浪按钮

<template><view class="content"><button class="button"><view class="liquid"></view><view class="btn-txt">水浪按钮</view></button></view></template><scrip…

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA 2024/1/15 18:05 百度搜索&#xff1a;ubuntu gtx1080m cuda https://blog.csdn.net/wb4916/article/details/129462103 20230311给Ubuntu18.04下的GTX1080M安装驱动 https://www.cnblogs.com/djiankuo/p/5886605.h…

ubuntu20.04一键通过docker-compose部署mysql 8.0.20

os&#xff1a;ubuntu20.04 docker&#xff1a;v24 docker-compose&#xff1a;v2.2.2 主要步骤 1.拉取镜像 docker pull mysql:8.0.20 2.创建目录 mkdir -p /data/docker_mysql/log mkdir -p /data/docker_mysql/data mkdir -p /data/docker_mysql/conf.d 3.创建配置文…

Hadoop分布式文件系统(三)

目录 一、Hadoop 1、MapReduce 1.1、理解MapReduce思想 1.2、分布式计算概念 1.3、MapReduce介绍 1.4、MapReduce特点 1.5、MapReduce局限性 1.6、MapReduce实例进程 1.7、MapReduce阶段组成 1.8、MapReduce数据类型 1.9、MapReduce官方示例 1.9.1、示例说明--圆周…

软件测试|如何使用selenium操作窗口滚动条

简介 我们在进行自动化测试工作的时候&#xff0c;如果页面内容过多&#xff0c;一次性加载耗时太长的话&#xff0c;会使用分段加载来加载页面内容&#xff0c;比如开始只加载页面顶端的内容&#xff0c;而如果要加载更多的数据&#xff0c;就需要我们向下滑动&#xff0c;让…

多无人机集群智能flocking

matlab2020可运行 GitHub - pareshbhambhani/MultiAgent-Flocking-framework: This is part of the current research I am working on.

pip与pip3的区别

pip 和 pip3 都是 Python 的包管理工具&#xff0c;用于安装第三方库。它们的区别在于&#xff1a; pip 是 Python 2 和 Python 3 通用的包管理工具&#xff0c;它可以安装适用于 Python 2 和 Python 3 的库。pip3 是专门用于 Python 3 的包管理工具&#xff0c;它只能安装适用…

如何通过ISPC使用Xe(核显)进行计算

我一直以为 ISPC 的 Xe 是只包含独立显卡的&#xff0c;比如 A770 这些&#xff0c;没想到看了眼文档是可以使用核显的&#xff0c;但只能在 Linux 和 Windows 上&#xff0c;macOS 不行&#xff0c;就想试试看。 写本文是因为 ISPC 已经出现了三四个版本的大改&#xff0c;但…

深入了解WPF控件:基础概念与用法(三)

掌握WPF控件&#xff1a;熟练常用属性&#xff08;三&#xff09; DataGrid 用于显示和编辑数据的表格控件。它可以从多种数据源&#xff08;如SQL数据库、LINQ查询或任何其他可绑定的数据源&#xff09;中显示和编辑数据&#xff0c;支持排序、筛选、分页等功能。 DataGrid…

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip,docker管理工具lazydocker、scope

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

Express(二):文件下载 - 分片下载

效果&#xff08;比较下载速度&#xff09; 服务端 请求响应头 源码 const express require(express); const path require("path"); const fs require("fs"); const router express.Router();const fileName 下载文件.zip; const filePath path.j…

基于LabVIEW的声音信号采集分析系统开发

摘要&#xff1a;以美国国家仪器(NI)公司开发的LabVIEW虚拟仪器为软件开发平台&#xff0c;设计了一个可以同步实现声音信号采集和分析的多功能模块化软件系统&#xff0e;借助LabVIEW图形化软件相应的声音读取、写入和存储函数实现对声音信号的采集、存储、时域分析和频域分析…

精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;15&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;2&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis…

Spring Boot异常处理!!!

SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转到默认显示异常的页面…

vue:使用【3.0】:条件模块

一、条件层级效果图 二、代码 <template><ContentWrap><!-- 添加条件分支:level1 --><div class"btnBox" v-if"isEdit"><el-button type"primary" click"add">添加条件分支</el-button></div…

如何优化大型语言模型,让AI回应更智能、更准确?

什么是检索增强生成&#xff08;RAG)&#xff1f; 检索增强生成&#xff08;RAG&#xff09;是一种优化大型语言模型输出的过程&#xff0c;它在生成回应之前会参考其训练数据源之外的权威知识库。大型语言模型&#xff08;LLM&#xff09;在大量数据上进行训练&#xff0c;使…