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

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

题目:素数取りゲーム

临摹的题解: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.hqwc.cn/news/455593.html

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

相关文章

一,凸包------9,Graham Scan:正确性

正确性可以用数学归纳法 如果前K个点是当前最好的凸包的话&#xff0c;那么&#xff0c;当所有点遍历后&#xff0c;必然是最好的凸包。 当k 3时&#xff0c;是个三角形&#xff0c;成立。 如果当K>3时&#xff0c;比如由点1-9组成兔凸包后&#xff0c;判断10号点是否凸…

VR视频编辑解决方案,全新视频内容创作方式

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正逐渐成为各个领域的创新力量。而美摄科技&#xff0c;作为VR技术的引领者&#xff0c;特别推出了一套全新的VR视频编辑方案&#xff0c;为企业提供了一个全新的视频内容创作方式。 美摄科技的VR视频编…

UML之在Markdown中使用Mermaid绘制类图

1.UML概述 UML&#xff08;Unified modeling language UML&#xff09;统一建模语言&#xff0c;是一种用于软件系统分析和设计的语言工具&#xff0c;它用于帮助软件开发人员进行思考和记录思路。 类图是描述类与类之间的关系的&#xff0c;是UML图中最核心的。类图的是用于…

第二十四回 王婆计啜西门庆 淫妇药鸩武大郎-Numpy索引和切片操作示例

郓哥被王婆打了&#xff0c;就去找武大郎。将情况一说&#xff0c;两人商定去抓奸。一天武大郎只做了两三扇炊饼&#xff0c;约好了时间&#xff0c;郓哥进去顶住大门不让王婆关&#xff0c;武大郎直接跑进去&#xff0c;西门庆刚开始躲到床底下&#xff0c;后被潘金莲提醒&…

C++——stl,string容器详解

目录 1.string是什么 2.string的构造 代码示例&#xff1a; 3.string的赋值操作 代码示例&#xff1a; 4.string字符串拼接 ​编辑 代码示例&#xff1a; 5.string查找和替换 代码示例&#xff1a; 6.字符串比较 代码示例&#xff1a; 7.string字符存取 代码示例…

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

车位检测,YOLOV8,OPENCV调用

车位检测YOLOV8NANO,opencv调用 车位检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

CodeFuse-VLM 开源,支持多模态多任务预训练/微调

CodeFuse-MFT-VLM 项目地址&#xff1a;https://github.com/codefuse-ai/CodeFuse-MFT-VLM CodeFuse-VLM-14B 模型地址&#xff1a;CodeFuse-VLM-14B CodeFuse-VLM框架简介 随着huggingface开源社区的不断更新&#xff0c;会有更多的vision encoder 和 LLM 底座发布&#x…

记一次VulnStack渗透

信息收集 netdiscover的主机发现部分不再详解&#xff0c;通过访问端口得知20001-2003端口都为web端口&#xff0c;所以优先考虑从此方向下手 外网渗透 GetShell Struct漏洞 访问2001端口后&#xff0c;插件Wappalyzer爬取得知这是一个基于Struct的web站点&#xff0c;直接…

基于深度置信网络的多模态过程故障评估方法及应用

源自&#xff1a;自动化学报 作者&#xff1a;张凯, 杨朋澄, 彭开香, 陈志文 “人工智能技术与咨询” 发布 摘 要 传统的多模态过程故障等级评估方法对模态之间的共性特征考虑较少, 导致当被评估模态故障信息不充分时, 评估的准确性较低. 针对此问题, 首先, 提出一种共性–…

最新模型VMamba:颠覆视觉Transformer,下一代主流Backbone?

论文标题&#xff1a; VMamba: Visual State Space Model 论文作者&#xff1a; Yue Liu, Yunjie Tian, Yuzhong Zhao, Hongtian Yu, Lingxi Xie, Yaowei Wang, Qixiang Ye, Yunfan Liu 1. 摘要 卷积神经网络&#xff08;CNN&#xff09;与视觉Transformer&#xff08;ViT…

【数据结构与算法】(11)基础数据结构 之 二叉树 二叉树的存储与遍历及相关示例 详细代码讲解

目录 2.10 二叉树1) 存储2) 遍历广度优先深度优先递归实现非递归实现 习题E01. 前序遍历二叉树-Leetcode 144E02. 中序遍历二叉树-Leetcode 94E03. 后序遍历二叉树-Leetcode 145E04. 对称二叉树-Leetcode 101E05. 二叉树最大深度-Leetcode 104E06. 二叉树最小深度-Leetcode 111…