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

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

题目:素数取りゲーム

临摹的题解: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)用一个循环,打印十行十列…

Matlab建立TCP/IP链接

参考&#xff1a; MATLAB实现tcp连接 - 知乎 (zhihu.com) MATLAB &#xff1a;【11】一文带你读懂serialport串口收发原理与实现_matlab serialport-CSDN博客 Transition Your Code to serialport Interface - MATLAB & Simulink - MathWorks 中国 Transition Your Code…

Zookeeper相关面试准备问题

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

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

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

计算机网络——02网络边缘

网络边缘 网络结构 网络边缘&#xff1a; 主机应用程序&#xff08;客户端和服务器&#xff09; 网络核心 互联着的路由器网络的网络 接入网、物理媒体 有线或无线通信链路 网络边缘 端系统&#xff08;主机&#xff09; 运行应用程序 客户/服务器模式&#xff08;C/S模式…

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应用都将…

【CSS transition(过渡效果)——详解】

CSS transition(过渡效果&#xff09;——详解 CSS transition CSS transition CSS transitions 是一种CSS特性&#xff0c;它允许你在不同的CSS属性值之间创建平滑的动画过渡效果&#xff0c;当你希望CSS属性在一段时间内从一个值过渡到另一个值时&#xff0c;就可以使用过渡…

【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是如何使用索引的?

摘自官网 MySQL使用索引进行以下操作: WHERE条件中,快速查找匹配的行。(快速查询数据) 从准备查询的数据中消除多余行。如果可以在多个索引之间进行选择,则MySQL通常会使用查找最少行数的索引。 如果表具有多列索引,那么优化器可以使用索引的任何最左前缀来查找行。 举例来…

算法题目题单+题解——图论

简介 本文为自己做的一部分图论题目&#xff0c;作为题单列出&#xff0c;持续更新。 题单由题目链接和题解两部分组成&#xff0c;题解部分提供简洁题意&#xff0c;代码仓库&#xff1a;Kaiser-Yang/OJProblems。 对于同一个一级标题下的题目&#xff0c;题目难度尽可能做…

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 提供了各种数据类型的生…