素数取りゲーム(线性筛、连续异或、博弈论

  • 小结
    • 博弈论题型
    • 素数的特性
    • 连续异或
  • 代码

题目:素数取りゲーム

临摹的题解:AT_ttpc2019d题解

这题真的看题解都断断续续看了两天才看懂这一个题解 : (

小结

本题一下遇到了我好多没了解过的点,博弈论、素数的一些特性,连续异或的本质

下文部分包含参考题解的情景下的用词

博弈论题型

  1. 取东西取尽结算胜负的博弈,都是剩余 相同类型的操作(本题对应贡献为1、2、3的三类)有偶数步数时,后手赢 ,因为后手直接克隆先手操作就稳赢了
  2. 由1.可得:分析此种博弈,从后手必胜的情况入手 比较简单,可以 剔除掉偶数部分去推演 ,奇数项留1个,就可以作所有情况的最终基本情况了

举例:(1、2、3表示贡献度)
奇数个1,奇数个2,奇数个3 ==> 1个1,1个2,1个3
上面两个是等效的,因为后手可以copy前面取其他1、2、3的所有操作
这其实刚好是参考题解中,贡献度异或为0情况时最复杂的情况的“最终基本情况”

  1. 先手必胜的情况,就是后手必输的情况!两种情况其实都是一种情况,“必输就是必胜!”

举例:(先手A,后手B,以先手必胜的情况开局) A走一步之后,此时A就是此时战况的后手了,而A仍然是是必胜的! 那不就是走一步后转化为后手的必胜情况了?

素数的特性

参考题解里解释的非常清楚。

连续异或

连续异或的作用:可以将其看作以“关”为起点(或者以第一个参与运算的值为起点,一样的),遇到1则开关一次,遇到0则不动的一个流程

结果就是偶数个1最终是“关”,也就是0,奇数个1就是“开”,也就是1
在这里插入图片描述

代码

#include <iostream>
#include <bitset>
using namespace std;
#define FIRST "An"
#define LAST "Ai"
//数组长度范围2ee5,素数范围1e6const int N = 1e6 + 5;
bitset<N> mark;     //注意!!!mark[i]==0 时才是素数
int primes[N/10];    //不需要那么大
int n;
int cnt = 0;int main()
{mark[0] = mark[1] = 1;	//mark[i]==0 时才是素数,所以0、1不是素数要标记//先初始化素数数据库,线性筛for (int i = 2; i <= N; i++){if(!mark[i])    primes[++cnt] = i;for (int j = 1; primes[j] <= N /i; j++){mark[primes[j] * i] = 1;if(i%primes[j] == 0) break;}}cin >> n;int num;int res = 0;for (int i = 1; i <= n; i++){cin >> num;if(mark[num-2] == 0)//如果-2是素数,那么一定>=5,先这样判断以避免越界,因为题目要求X>=2,而2-4<0{if(num ==7)res ^= 3;elseres ^= 2;}elseres ^= 1;}switch (res){case 0:cout << LAST;		//后手必胜break;default:cout << FIRST;break;}
}

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

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

相关文章

Python中的while循环,知其然知其所以然

文章目录 while循环结构1.用循环打印1 ~ 100步骤解析2. 1 ~ 100的累加和3.死循环1. 用死循环的方法实现 1 ~ 100累加和 4. 单向循环(1)打印 一行十个小星星*(2)通过打印一个变量的形式,展现一行十个小星星(3)一行十个换色的星星 ★☆★☆★☆★☆★☆(4)用一个循环,打印十行十列…

Zookeeper相关面试准备问题

Zookeeper介绍 Zookeeper从设计模式角度来理解&#xff0c;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的注册&#xff0c;一旦这些数据的状态发生了变化&#xff0c;Zookeeper就负责通知已经在Zoo…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

windows10忘记密码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

杨中科 ASP.NETCORE 高级14 SignalR

1、什么是websocket、SignalR 服务器向客户端发送数据 1、需求&#xff1a;Web聊天;站内沟通。 2、传统HTTP&#xff1a;只能客户端主动发送请求 3、传统方案&#xff1a;长轮询&#xff08;Long Polling&#xff09;。缺点是&#xff1f;&#xff08;1.客户端发送请求后&…

git 合并多条提交记录

我要合并多条提交记录&#xff08;合并前7条为一条&#xff09;&#xff0c;实现如下效果&#xff1a; 使用git rebase // 查看前10个commit git log -10 // 将7个commit压缩成一个commit&#xff1b;注意&#xff1a;vim编辑器 git rebase -i HEAD~4 // add已经跟踪的文件 g…

MemcachedRedis构建缓存服务器

目录 Memcached&Redis构建缓存服务器 一、介绍 二、memcached 1、特点 2、服务框架 3.配置安装memcached 三、redis服务 1、介绍 2、特点 3、缓存 4、安装redis 5、数据持久化 6、redis主从配置 Memcached&Redis构建缓存服务器 一、介绍 许多Web应用都将…

【Java基础_02】Java变量

【Java基础_02】Java变量、运算符、程序控制结构 文章目录 1 变量1.1 程序中“”号的使用1.2 数据类型1.3 整数类型1.3.1 整数类型的分类1.3.2 整型的使用细节 1.4 浮点类型1.4.1 浮点型的分类1.4.2 浮点类型使用细节 1.5 字符类型1.5.1 字符类型使用细节1.5.2 字符类型本质1.5…

2024.2.5日总结(小程序开发2)

小程序的宿主环境 宿主环境 宿主环境指的是程序运行所必须的依赖环境。 Android系统和iOS系统是两个不同的宿主环境。安卓版的微信App不能再iOS环境下运行。Android是安卓软件的宿主环境&#xff0c;脱离了宿主环境的软件是没有意义的。 小程序的宿主环境 手机微信是小程序…

黑豹程序员-ElementPlus支持树型组件带图标以及icon避坑

效果 vue代码 参数说明&#xff1a;node当前节点&#xff0c;data当前节点后台传入数据。 el-tree自身不支持图标&#xff0c;需要自己去利于实现&#xff0c;并有个坑&#xff0c;和elementui写法不同。 <el-col :span"12"><el-form-item label"绑定…

VC++添加菜单学习

新建一个单文档工程&#xff1b; 完成以后看一下有没有出现如下图的 资源视图 的tab&#xff1b;如果没有&#xff0c;在文件列表中找到xxx.rc2文件&#xff1b; 点击 资源视图 的tab&#xff0c;或者双击 .rc2 文件名&#xff0c;就会转到如下图的资源视图&#xff1b;然后展…

MySQL的触发器

一&#xff1a;概述 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;特性 二&#xff1a;基本操作 -- 用户表 create table user(uid int primary key,username varchar(50) not null,password varchar(50) not null );-- 用户信息操作日志表 create table user_…

如何有效降低商业电子邮件被盗的风险?

一、什么是商业电子邮件泄露&#xff1f; 你是否曾经经历过信任某人&#xff0c;但最终却被背叛的痛苦&#xff1f;在商业环境中&#xff0c;业务电子邮件泄露&#xff08;BEC&#xff09;就是一种通过电子邮件方式被你信任的人背叛的情况。然而&#xff0c;与人际关系中的背叛…

07.你还在手动部署代码吗

如今的项目或者个人项目中,大家的代码怎么部署呢?公司一般都有完整的持续集成以及持续交付平台,对于小公司可能也有各自搭建了一些,比如jenkins,以及gitlab集成的gitlab-ci等等,这些都可以完成我们部署的工作甚至是测试集成等等一系列流水化工作。 但是,即使如此,我依…

软件测试-造数工具Faker简介

这里的Faker不是英雄联盟的Faker。。。 一、Python Faker 简介 Python Faker 是一个用于生成假数据的Python库。它允许开发者快速创建具有随机特征的虚构数据&#xff0c;这对于测试、填充数据库以及其他需要模拟真实数据的场景非常有用。Python Faker 提供了各种数据类型的生…

【经典例子】Java实现2048小游戏(附带源码)

一、游戏回顾 2048游戏是一款数字益智游戏&#xff0c;目标是通过合并相同数字的方块来达到2048这个目标。游戏在一个4x4的方格上进行&#xff0c;每个方格上都有一个数字&#xff08;初始时为2或4&#xff09;。玩家可以通过滑动方向键&#xff08;上、下、左、右&#xff09;…

静态代码块中使用 ExecutorService 执行多线程会出现什么情况呢?

AQS系列 1、AQS核心原理 2、ReentrantLock 原理及示例 3、CountDownLatch / Semaphore 示例及使用场景 4、BlockingQueue 示例及使用场景 5、静态代码块中使用 ExecutorService 执行多线程会出现什么情况呢&#xff1f; 文章目录 AQS系列一、 一般场景二、static {} 场景三、原…

AD高速板常见问题和过流自锁

可以使用电机减速器来增大电机的扭矩&#xff0c;低速运行的步进电机更要加上减速机 减速电机就是普通电机加上了减速箱&#xff0c;这样便降低了转速增大了扭矩 HDMI布线要求&#xff1a; 如要蛇形使其等长&#xff0c;不要在HDMI的一端绕线。 HDMI走线时两边拉线&#xff0…

忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

RAG&#xff08;检索增强生成&#xff09;设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。 然而&#xff0c;重点主要是改进检索工具的效率&#xff0c;如嵌入式搜索、混合搜索和微调嵌入&#xff0c;而不是智能搜索。 这篇文章介绍了一种新的方法&#xff0c;灵感…

信创ARM架构QT应用开发环境搭建

Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言 有没有碰到过这种情况&#xff1…