DescriptionDescriptionDescription

  1. 有nnn堆石子,每堆石子有aia_iai​个,规定每次可以取走一堆中的任意个但不能不取
  2. 给定mmm组询问,每次询问一个左端点∈[a,b]\in[a,b]∈[a,b],右端点等于rrr的区间,最多先选ara_rar​多少个石子必胜,如果必败输出-1
  3. 注意,必胜后要将石子变成取走的数量

SolutionSolutionSolution

第一点显然就是一个NIMNIMNIM博弈嘛,我们怎么和后面扯上联系呢?

注意,NIMNIMNIM博弈先手必胜,当且仅当石子数异或起来不为0,我们设最终选择的左端点为yyy,异或起来的值为xxx,当先手必胜时,显然有:

x=ayxoray+1xor…arx=a_y\ xor\ a_{y+1}\ xor…a_rx=ay​ xor ay+1​ xor…ar​

而对于ara_rar​,如果在二进制下ara_rar​存在位数与xxx相等,此时必然ara_rar​可以取走ar−arxorxa_r-a_r\ xor\ xar​−ar​ xor x致胜,否则其必败

由于我们要使最后取走的数量最大,所以应当使后者尽量小,考虑将其化简为arxorx=xxorar=ayxoray+1xor…arxorar=ayxoray+1xor…ar−1a_r\ xor\ x=x\ xor\ a_r=a_y\ xor\ a_{y+1}\ xor…\ a_r\ xor\ a_r=a_y\ xor\ a_{y+1}\ xor…a_{r-1}ar​ xor x=x xor ar​=ay​ xor ay+1​ xor… ar​ xor ar​=ay​ xor ay+1​ xor…ar−1​

使后者尽量小,由于本题较水,循环求解即可

正解是做一遍前缀和,问题就转换成了区间取出两个数异或和最大,用可持久化trietrietrie解决即可,但是由于本题带修(第三点),所以要用带修可持久化trietrietrie(即分块处理)

暴力复杂度为O(nm)O(nm)O(nm),正解复杂度由于作者太菜不会,各位读者请自行计算


CodeCodeCode

#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;int n,m,r,a,b,ans,x,p[100001];
inline long long read()
{char c;int f=0,d=1;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
signed main()
{n=read();for(register int i=1;i<=n;i++) p[i]=read();for(m=read();m--;){r=read();a=read();b=read();ans=0x3f3f3f3f;x=0;if(p[r]==0) {puts("-1");continue;}if(b==r) {printf("%d\n",p[r]);p[r]=0;continue;}x=0;for(register int i=r-1;i>=a;i--) {x^=p[i];if(i<=b) ans=min(ans,x);}if(p[r]-ans<=0) {puts("-1");continue;}printf("%d\n",p[r]-ans);p[r]=ans;}
}

JZOJ 3339. 【NOI2013模拟】wyl8899和法法塔的游戏相关推荐

  1. 序贯高斯模拟和普通克里格法的区别

    序贯高斯模拟和普通克里格法的区别 1.序贯高斯模拟 模拟结果整体分布较离散,突出原始数据的非均质性和不确定性. 可产生多个结果. 2.普通克里格法 模拟结果追求最高的估值精度和最小的估值方差,空间分布 ...

  2. 365. 水壶问题-暴力模拟倒水过程-递归法

    365. 水壶问题-暴力模拟倒水过程-递归法 有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCa ...

  3. 【线段树】【FeyatCup】——2.法法塔的奖励

    首先感谢并膜拜两位大佬 wyl8899 & 法法塔 感谢两位的出题! 题目: 法法塔是很喜欢写程序的.所以冒着就算码农屌丝一辈子的风险也大无畏地写着程序. 码农们为了表彰法法塔的坚持与执着,决 ...

  4. [原创]测试用例设计之场景法法

    [原创]测试用例设计之"场景法"法  场景法设计测试用例,主要用在于事件触发流程中,当某个事件触发然后就形成相应的场景流程,不同的事件触发,不同顺序和不同的处理结果,就形成一系列的 ...

  5. 最近迷上了自走棋塔防游戏,玩法比较休闲,而且耐玩!

    梦塔防-自走棋 梦塔防手游是一款3V3即时对战类手机游戏,也是自走棋模式打造的游戏,游戏以策略元素为主,玩家在游戏中可以自由调配兵种,以及功防阵局,丰富的兵种以及精致的游戏界面,为你提供更好的游戏体验 ...

  6. jzoj3339-[NOI2013模拟]wyl8899和法法塔的游戏【博弈论,暴力】

    正题 题目大意 有nnn堆石子,每次选择一个区间博弈,先手必须先取最右边的石子堆. 每次询问(r,a,b)(r,a,b)(r,a,b)表示在a∼ba\sim ba∼b中选择一个数lll.要求使用l∼r ...

  7. python计算圆周率_python模拟蒙特·卡罗法计算圆周率

    蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...

  8. “模拟飞行”的玩法(ArcGIS)

    "模拟飞行"的介绍与玩法 说明: 模拟飞行是GIS软件的一个可玩性很高又十分有趣的功能,我想在这里给大家简单的介绍一下ArcGIS中的模拟飞行功能,简直让人爱不释手. 具体内容: ...

  9. java 余额_java模拟实现 最大余额法

    java初步实现最大余额法,自己使用过程中没发现问题(有没有其它bug,还有待验证) 阅读之前请先查看前一篇 <百度echarts饼图百分比的计算规则---最大余额法>,保证理解了什么是最 ...

  10. jzoj3338-[NOI2013模拟]法法塔的奖励【权值线段树,线段树合并】

    正题 题目大意 一棵树,对于每个点,求从任何一个在该点的子树为头,以该点为结尾的序列必须选择这个点的最长不降子序列. 解题思路 首先我们使用权值线段树计算答案每个点(l,r,w)(l,r,w)(l,r ...

最新文章

  1. 挑选适合自己的公司——网络工程师你是否真的已经倒下(二)
  2. C++ STL 之 map
  3. 华理c语言设计网上作业,华东理工大学第一学年第二学期网上作业参考答案C语言设计1...
  4. 接口隔离原则_设计模式六大原则
  5. Ubuntu caffe 测试matlab接口
  6. 非递归实现二叉树(前序,中序,后序)c/c++实现
  7. matlab平差实习报告,《测量平差》课程设计实习报告 五星文库
  8. python利用PyQt5制作QQ空间登入客户端
  9. MongoDB 高阶
  10. cmd命令查询电脑序列号_WINDOWS 用命令行 找到PC序列号以及计算机名称
  11. 想做合格的产品经理,你需要这个证书
  12. verilog 状态机 三角波 发生器
  13. Server2008如何卸载MySQL_「完美卸载」完美卸载SQL Server 2008 R2 的方法,适合所有问题 - seo实验室...
  14. Hankson 的趣味题
  15. 平均股价的时间序列图形_数据可视化——pandas绘制股票走势图
  16. 马槊, 在古代是将领身份的象征
  17. 防止刷新页面造成表单重复提交
  18. .NET CORE实践(1)--Ubuntu下的Hello World
  19. 力扣-718最长重复子数组(dp)
  20. 压测报502 badgateway问题解决

热门文章

  1. macOS Monterey 12.4 (21F79) 正式版 ISO、IPSW、PKG 下载
  2. 06、Flutter FFI 类
  3. c++可视化性能测试
  4. 百度 bae php,利用百度BAE搭建免费CDN
  5. 智能眼镜的“减熵式增长”
  6. python脚本课程_python选课脚本
  7. Vue图表(v-charts, e-charts)入门安装使用
  8. (六)CRAFT----2019CVPR论文解读
  9. 聊聊DevOps制品管理-不止是存储制品这么简单
  10. 吐血整理C++书单,萌新到大牛,要看哪些书?