首页 > 其他分享 >梦熊四月 csp-s 模拟赛2 T2 排序

梦熊四月 csp-s 模拟赛2 T2 排序

时间:2024-05-12 18:20:02浏览次数:12  
标签:le T2 ne oplus 异或 对数 梦熊 csp 逆序

小 B 想要对一个长为 \(n\) 的序列 \(A\) 排序。已知 \(A\) 中只包含 \(0,1,\cdots,n-1\) 且对任意 \(i\ne j\) 有 \(A_i\ne A_j\) 且 \(n\) 为 \(2\) 的次幂。
为了排序,小 B 只想用以下两种操作:
交换相邻的两个位置,也就是说选择 \(1\le i\le n-1\) 并且交换 \(A_i,A_{i+1}\) 。
选择一个整数 \(x\),将每个 \(A_i\) 都替换为 \(A_i\oplus x\) ,这里 \(\oplus\) 为二进制按位异或操作。
请问最少需要多少次操作才能给整个序列排序?
\(n\le 2^{22}\)。时间限制 3s。

很好的题,考察了推性质的能力。

不难发现二操作最多进行 \(1\) 次,因为异或具有结合律。

现在重点来研究一下二操作。

令 \(n=2^k\),显然 \(x\le n\),根据 \(p\ne q\) 时 \(p\oplus x\ne q\oplus x\),发现异或后的序列是原序列的一个置换。注意,当 \(n\) 不为 \(2\) 的次幂时这一点是不满足的,\(n=2^k\) 保证了映射的定义域和值域相同。

因此最优的方法一定是通过异或 \(x\) 后得到原序列的一个置换,然后反复应用操作 \(1\),所以再来看看操作 \(1\)。

结论:操作 \(1\) 最少需要应用 \(s(A)\) 次,\(s(A)\) 代表 \(\{A_i\}\) 的逆序对数。

证明可以看 火柴排队

所以我们只需要找到 \(x\),使得 \(\{A_i\oplus x\}\) 的逆序对数最小即可。

这个数据范围明示 \(O(n\log n)\),拆位考虑。

如果 \(x\) 的第 \(i\) 位为 \(1\),当且仅当 \(\{A_i\oplus 2^i\}\) 的逆序对数有所减少。

证明

首先我们来证明对于两个数 \(A_i,A_j\),两者在数组中的相对位置只会至多发生一次改变。

不失一般性地令 \(A_i<A_j\)。设两数的二进制下最高的出现不同的是第 \(p\) 位。

显然 \(x\) 二进制下的 \(p+1\sim\infty\) 位我们都不关心,现在来讨论 \(x\) 二进制下第 \(p\) 位的数。

  • 若 \(x(p)=1\),此时由于 \(A_i(p)\ne A_j(p)\),所以两者可能会产生相对位置的交换,不难发现,此后无论 \(x(0)\sim x(p-1)\) 取何值都不会产生第二次交换。

  • 否则 \(x(p)=0\),同样,无论 \(x(0)\sim x(p-1)\) 的取值,都不会产生交换。

由于 \(A_i,A_j\) 的相对位置只与 \(x(p)\) 有关,所以可以认为 \(x\) 在二进制下各位取值对答案的贡献,每一位都是不相关的、独立的

因此,可以按照上面所说的贪心。

怎么统计逆序对数是否减少?

假设我们目前在考虑 \(x\) 的第 \(p\) 位,那么两个数的相对位置可能改变当且仅当对于 \(q>p\),\(A_i(q)=A_j(q)\),于是我们就可以利用这个性质,方便快捷的统计出对于一个数来说,它的新逆序对数会是多少。

当然,本文中的所有证明都不是那么的严谨,严谨的证明需要群论知识。

标签:le,T2,ne,oplus,异或,对数,梦熊,csp,逆序
From: https://www.cnblogs.com/BYR-KKK/p/18188023

相关文章

  • Spring Boot2中Swagger3使用
    1.依赖引入<!--引入swagger--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.7.0</version></dependency>2.常用注解介绍swagger2......
  • 5.9 T2 推式子的过程
    和题解的做法有些不同,不知道为什么,但是能够通过。首先按题解的做法先将式子除以\(z^2\)。令\(\frac{y}{z}=a,\frac{x}{z}=b\)。有:\[\begin{aligned}\frac{x^2}{z^2}-\frac{xy}{z^2}-\frac{y^2}{z^2}+\frac{y}{z}+1-\frac{x}{z}=0\\-a^2-ab+b^2+a+1-b=0\end{aligned}\]题解......
  • P5664 [CSP-S2019] Emiya 家今天的饭
    题意简述有\(n\)种方法和\(m\)种食材,第\(i\)种方法第\(j\)种食材做出来的菜有\(a_{i,j}\)种。有以下限制:至少做一盘菜。每种方法做出来的菜品数至多为\(1\)。所有以第\(i\)种食材做出来的菜品数不超过菜品种数的一半。求方案数。\(n\le100,m\le2\times10^......
  • buuctf-pwn-ciscn_2019_c_1-ret2libc
    检查一下保护情况ida里选项2,3都没有什么重要的信息,直接看选项1发现栈溢出漏洞,不过程序对输入的字符串有一个异或加密,这里可以构造异或后的payload,利用程序来解密,或者可以直接在payload第一位加上'\x00',直接截断payload后面的异或操作用cyclic测一下溢出点,得到88找一下system......
  • YC282B [ 20240430 CQYC省选模拟赛 T2 ] 温柔(gentle)
    题意有\(n\)个魔法少女,每个魔法少女的法力为\(a_i\),她们要打败\(n\)个法力为\(b_i\)的怪兽!你需要构造\({c_n}\),使得对于给定的\(m\)组限制,满足:\(c_x\geb_x\landc_y\geb_y\)或\(c_y\geb_x\landc_x\geb_y\)。你需要\(\sum_{i=1}^n|c_i-a_i|\),并......
  • ELK日志告警elastalert2
    在/opt目录创建文件以及文件夹 -rw-r--r--1rootroot3394月1714:26docker-compose.ymldrwxr-xr-x3rootroot40964月1715:53elastalert2 [root@node1opt]#treeelastalert2/elastalert2/├──elastalert.yaml└──rules├──......
  • 联考物理T24
    Solution—T24题目描述(本PDF为JJL所制)如图所示,一厚壁玻璃容器放在水平面桌面上,容器底内底面积为$50\cm^2$,外底面积为$100\cm^2$。将一定质量的水倒入容器中,水的深度为\(10\cm\)。求:\((p_水=1.0\times10^3kg/m^3,g\text{取}10N/kg)\)(1)水对容......
  • SpringBoot2.x整合Redis Sentinel
    redissentinel搭建之后,在spring-boot项目中集成。配置在pom.xml文件中添加如下依赖配置(这里spring-boot版本2.2.5),这个版本中,默认使用lettuce作为redis连接池。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<......
  • ret2csu和srop
    ret2csu:其实就是一种攻击手法,当我们没有完整的gadget的时候,我们就可以使用csu这个手法来进行攻击,那么csu是什么呢?这个其实就是在程序中一般都会有一段万能的控制参数的gadget,里面可以控制rbx,rbp,r12,r13,r14,r15以及rdx,rsi,edi的值,并且还可以call我们指定的地址。然后劫持程序......
  • [Python急救站]基于Transformer Models模型完成GPT2的学生AIGC学习训练模型
    为了AIGC的学习,我做了一个基于TransformerModels模型完成GPT2的学生AIGC学习训练模型,指在训练模型中学习编程AI。在编程之前需要准备一些文件:首先,先win+R打开运行框,输入:PowerShell后输入:pipinstall-Uhuggingface_hub下载完成后,指定我们的环境变量:$env:HF_ENDPOINT="ht......