【题解】[COCI 2025/2026 #1] 松鼠 / Zagi
P14470 [COCI 2025/2026 #1] 松鼠 / Zagi - 洛谷谁点的博弈论补充了下之前写博弈论缺的对 SG 和 mex 的解释。0.分析完全没接触过博弈论的去看这个博客看完 2.6 就回来【博弈论和 SG 函数 | 那忘算 10】巴什博奕 尼姆博弈及其变种 威佐夫博弈附例题-CSDN博客1.流程当你删掉某个数后被夹在两个中间的区间就完全由“两个相邻的的位置”决定这样的区间总数是。所以只有靠近原始询问区间左右边界的那些段才可能和询问边界有关。每个询问、每种数最多贡献左右两段所以是。所以用记忆化搜索把算过的区间存下来状态数是可接受的。我们可以先求出两个数组来确定夹查询段两个相同值的位置。ne[x][i]位置 i 及之后第一个值为 x 的位置 last[x][i]位置 i 及之前最后一个值为 x 的位置接着求所有相邻相同值之间段的 SG 值。对于求区间的 SG 值的递归函数枚举每个数值用 ne 和 last 判断有无在区间出现过一对即两个及以上。如果出现过用区间内最靠近端点的两个将区间分成三段分别递归。递归出来的值就是上述的 “删掉某个值后所有小段异或的 SG 值”我们用数组记存。然后就可以枚举所有值看哪个没出现求 mex 了如果值是没出现过的最小整数而且这段查询区间刚刚好被两个值夹在中间这个区间就是相邻两个值之间的区间求出的 SG 值需要记存。2.算法好了现在最大的问题来了以上说的 SG 值要用什么数据结构存储查询对于每个数值都要记录特定的的异或值可以转为前缀异或和维护。数据范围考虑使用分块我们定义 w1,w2 分别为块间前缀和、块内前缀和。我们只有是刚刚好被两个值夹着的区间才记存异或值可以将作为记存位置先更新块内部分从到当前块末尾每个位置的 w2 都异或。更新块间部分从所在块到末尾块每个块的 w1 异或。这样每次查询只有右端点大于等于的时候才会用到的异或值。查询的时候计算的前缀异或和以及的前缀异或和两个一异或就是答案。别忘了记忆化搜索。3.代码数据 1e5考虑使用 pbds 里面的哈希数组不然被卡常#includebits/stdc.h #includebits/extc.h using namespace std; using namespace __gnu_pbds; const int N 1e5 10; const int B 320; int n; int a[N]; // 记忆化f[l][r] 存储区间 [l, r] 的 SG 值空区间为0 gp_hash_tableint, int f[N]; struct block { int w1[N], w2[N]; int get(int x) { return (x - 1) / B 1; } void modify(int x, int d) { if (d 0) return; int bid get(x); int r min(bid * B, n); for (int i x; i r; i) { w2[i] ^ d; } for (int i bid; i get(n); i) { w1[i] ^ d; } } int prefix(int pos) { if (pos 0) return 0; int b get(pos); return w1[b - 1] ^ w2[pos]; } int query(int l, int r) { if (l r) return 0; return prefix(r) ^ prefix(l - 1); } } t[34]; // 为每个数字 x1~32维护一个数据结构存储相邻两个 x 之间的区间的 SG 值 vectorint g[34]; int ne[34][N], last[34][N]; // ne[x][i]位置 i 及之后第一个值为 x 的位 // last[x][i]位置i及之前最后一个值为 x 的位置 bool cmp(pairint, int a, pairint, int b) { return a.second - a.first b.second - b.first; } int dfs(int l, int r) { // 计算区间 [l, r] 的 SG 值 if (l r) { return 0; } if (f[l].find(r) ! f[l].end()) { return f[l][r]; // 记忆化 } bool st[34] {0}; // st[k] 标记数字k是否在 [l,r] 中出现 bool vis[34] {0}; // vis[x] 标记后继 SG 值x是否可达 for (int k 1; k 32; k ) { int posl ne[k][l]; // [l,r] 中第一个k的位置 int posr last[k][r]; // [l,r] 中最后一个k的位置 if (posl r) continue; // 该数字不在区间中 st[k] true; int suma dfs(l, posl - 1); int sumb dfs(posr 1, r); int sumc t[k].query(posl 1, posr - 1); int sum suma ^ sumb ^ sumc; vis[sum] true; // 标记后继SG值 } // 求 mex未出现的最小非负整数 for (int i 0; ; i ) if (!vis[i]) { if (l ! 1 r ! n a[l - 1] a[r 1] !st[a[l - 1]]) { t[a[l - 1]].modify(r, i); // 以区间的右端点 r 作为存储位置存入 SG 值 } return f[l][r] i; } } int main() { ios::sync_with_stdio(false); cin.tie(0); int Q; cin n Q; for (int i 1; i n; i ) { cin a[i]; g[a[i]].push_back(i); // 记录每个值出现的位置 } memset(ne, 0, sizeof(ne)); memset(last, 0, sizeof(last)); for (int i 1; i 32; i ) { ne[i][n 1] n 1; for (int j : g[i]) { ne[i][j] last[i][j] j; } for (int j 1; j n; j ) { if (!last[i][j]) last[i][j] last[i][j - 1]; } for (int j n; j; j --) { if (!ne[i][j]) ne[i][j] ne[i][j 1]; } } vectorpairint, int query; for (int i 1; i 32; i ) for (int j 1; j g[i].size(); j ) query.push_back({g[i][j - 1] 1, g[i][j] - 1}); sort(query.begin(), query.end(), cmp); for (auto t : query) { dfs(t.first, t.second); // 先计算出这些区间的 SG 值并存入分块 } while (Q -- ) { int l, r; cin l r; cout (dfs(l, r) ? Toni : Jakov) \n; // SG ! 0 先手胜 } return 0; }

相关新闻

Linux性能优化工具系列详解(4)

Linux性能优化工具系列详解(4)

接前一篇文章:Linux性能优化工具系列详解(3) 本系列内容参考: 极客时间 —— 倪朋飞 《Linux 性能优化实战》 特此致谢! 系列工具 2. mpstat (2)详情 OPTIONS -A This option …

2026/8/24 7:33:47 阅读更多 →
一招搞定MTKClient连接问题:MT6789设备BROM模式反复卡死的排查与修复指南

一招搞定MTKClient连接问题:MT6789设备BROM模式反复卡死的排查与修复指南

一招搞定MTKClient连接问题:MT6789设备BROM模式反复卡死的排查与修复指南 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient 当你把一台搭载Helio G99(MT6789&#xff…

2026/8/23 21:47:49 阅读更多 →
9大网盘直链解析工具实测:LinkSwift让真实下载地址秒到手,链接还不用过第三方服务器

9大网盘直链解析工具实测:LinkSwift让真实下载地址秒到手,链接还不用过第三方服务器

9大网盘直链解析工具实测:LinkSwift让真实下载地址秒到手,链接还不用过第三方服务器 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百…

2026/8/24 20:49:41 阅读更多 →

最新新闻

数字化转型全解析:什么是数字化转型?

数字化转型全解析:什么是数字化转型?

一、为什么数字化转型成为时代命题过去十年,「数字化转型」从一个相对陌生的技术概念,逐步演变为企业战略、政府治理乃至整个社会运行的核心议题。无论是传统制造业的车间改造,还是金融机构的服务重构,无论是零售行业的渠道变革&a…

2026/8/26 20:28:54 阅读更多 →
mes厂家有哪些?从开发与二次开发灵活性看mes厂家的业务适配深度

mes厂家有哪些?从开发与二次开发灵活性看mes厂家的业务适配深度

半导体制造是一个工艺流程高度差异化的领域。同样是封测环节,做引线键合和做倒装焊的工序逻辑完全不同;即便是同一种封装形式,不同工厂的设备配置、物料编码规则、质量判定标准也各有差异。标准化的mes产品往往只能覆盖通用流程,而…

2026/8/26 20:27:53 阅读更多 →
[AutoSar]BSW_Com010 CAN IF 模块介绍

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式3.2 Hardware object handles(HO)3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDUs3…

2026/8/26 20:27:53 阅读更多 →
IMA 零代码搭建财务制度 RAG 问答助手(“AI+财务“最经典应用)

IMA 零代码搭建财务制度 RAG 问答助手(“AI+财务“最经典应用)

IMA 零代码搭财务制度 RAG 问答助手 从文档导入到检索调优,一套照着做的极简落地法。 很多人一听到 “RAG” 就头大:向量库、Embedding、重排序、余弦相似度……感觉非得会 Python、会部署才能玩。其实对大多数职场人来说,个人知识库 垂直问…

2026/8/26 20:27:53 阅读更多 →
数字化转型:转什么、怎么转?

数字化转型:转什么、怎么转?

一、引言:为什么今天必须认真讨论数字化转型过去十年,“数字化转型”从一个概念热词,逐渐变成了企业无法回避的战略命题。无论是制造业、零售业、金融业,还是公共服务、农业和医疗领域,几乎所有行业都在谈论数字化。然…

2026/8/26 20:27:53 阅读更多 →
天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错

天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错

天猫店群自动化管理系统:20核并发不抢焦,单机跑通百店零报错 做店群的老板都知道,天猫的同行数据截流,是店群运营中最耗人力也最容易出错的环节。 同行截流是店群最核心的引流手段。别人花大价钱投流的爆款,你把他的…

2026/8/26 20:27:53 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →