[ARC154E] Reverse and Inversion

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

神仙题!(原题链接)

对于这样的题,先不要绕到具体操作里出不来。我们先把复杂的式子进行变形。

对于题中式子,先不考虑翻转,设 p p p 为给定排列。则:
f ( p ) = ∑ i < j [ p i > p j ] ( j − i ) = ∑ 1 ≤ i < j ≤ n , p i > p j ( j − i ) = ∑ 1 ≤ i < j ≤ n , p i > p j j − ∑ 1 ≤ i < j ≤ n , p i > p j i \begin{aligned} f(p)&=\sum_{i<j}[p_i>p_j](j-i) \\ &=\sum_{1\le i<j\le n,p_i>p_j}(j-i) \\ &=\sum_{1\le i<j\le n,p_i>p_j}j_{}-_{}\sum_{1\le i<j\le n,p_i>p_j}i \end{aligned} f(p)​=i<j∑​[pi​>pj​](j−i)=1≤i<j≤n,pi​>pj​∑​(j−i)=1≤i<j≤n,pi​>pj​∑​j​−​1≤i<j≤n,pi​>pj​∑​i​

此时式子依然很复杂,考虑拆解 i i i 的贡献。则:
f ( p ) = ∑ i = 1 n i ∑ j = 1 i [ p i < p j ] − ∑ i = 1 n i ∑ j = i + 1 n [ p i > p j ] = ∑ i = 1 n ( ∑ j = 1 i [ p i < p j ] − ∑ j = i + 1 n [ p i > p j ] ) \begin{aligned} f(p)&=\sum_{i=1}^{n}i\sum_{j=1}^{i}[p_i<p_j]-\sum_{i=1}^{n}i\sum_{j=i+1}^{n}[p_i>p_j] \\ &=\sum_{i=1}^{n}\left ( \sum_{j=1}^{i}[p_i<p_j]-\sum_{j=i+1}^{n}[p_i>p_j] \right ) \end{aligned} f(p)​=i=1∑n​ij=1∑i​[pi​<pj​]−i=1∑n​ij=i+1∑n​[pi​>pj​]=i=1∑n​(j=1∑i​[pi​<pj​]−j=i+1∑n​[pi​>pj​])​

此时再考虑括号内的式子还能怎么简化。注意到 [ 1 , i ] [1,i] [1,i] 中大于 p i p_i pi​ 的数,实际上就是 i i i 减去区间内小于 p i p_i pi​ 的数。故:
f ( p ) = ∑ i = 1 n i ( i − ∑ j = 1 i [ p i ≥ p j ] − ∑ j = i + 1 n [ p i ≥ p j ] ) = ∑ i = 1 n i ( i − ∑ j = 1 n [ p i ≥ p j ] ) \begin{aligned} f(p)&=\sum_{i=1}^{n}i\left (i- \sum_{j=1}^{i}[p_i\ge p_j]-\sum_{j=i+1}^{n}[p_i\ge p_j] \right ) \\&=\sum_{i=1}^{n}i\left ( i-\sum_{j=1}^{n}[p_i\ge p_j] \right ) \end{aligned} f(p)​=i=1∑n​i(i−j=1∑i​[pi​≥pj​]−j=i+1∑n​[pi​≥pj​])=i=1∑n​i(i−j=1∑n​[pi​≥pj​])​

给定我们的是一个排列,那这 ∑ j = 1 n [ p i ≥ p j ] \begin{aligned} \sum_{j=1}^{n}[p_i\ge p_j] \end{aligned} j=1∑n​[pi​≥pj​]​ 实际上就是 i i i 的排名,那不就是 p i p_i pi​了!

所以 f ( p ) = ∑ i = 1 n i ( i − p i ) \begin{aligned} f(p)&=\sum_{i=1}^{n}i\left ( i-p_i \right ) \end{aligned} f(p)​=i=1∑n​i(i−pi​)​。

于是式子变的可求,此时再考虑区间翻转。 i i i 在每一次翻转后的具体位置是不可直接计算的,所以我们只需要算出 i i i 在 m m m 次操作后到达位置的期望 E ( i ) E(i) E(i) 即可求的最终答案,即:
( C n + 1 2 ) m ∑ i = 1 n i 2 − p i × E ( i ) \begin{aligned} (C_{n+1}^{2})^m \sum_{i=1}^{n}i^2-p_i\times E(i) \end{aligned} (Cn+12​)mi=1∑n​i2−pi​×E(i)​

思考翻转的本质,设 i i i 被翻转并最终翻转到 j j j,那么翻转的中心显然是 i + j 2 \frac{i+j}{2} 2i+j​。
若 i > j i>j i>j,则翻转的方案数为 ( j , n − i + 1 ) (j,n-i+1) (j,n−i+1)。
若 i < j i<j i<j,则翻转的方案数为 ( i , n − j + 1 ) (i,n-j+1) (i,n−j+1)。
试着把两种情况合并,发现最终方案数为 m i n ( i , n − i + 1 , j , n − j + 1 ) min(i,n-i+1,j,n-j+1) min(i,n−i+1,j,n−j+1)。
由此我们注意到从 i i i 翻转到 j j j,和从 i i i 翻转到 n − j + 1 n-j+1 n−j+1 的概率是相等的。所有位置总贡献就是 j + n − j + 1 2 = n + 1 2 \frac{j+n-j+1}{2}=\frac{n+1}{2} 2j+n−j+1​=2n+1​,最终期望为一个定值。

再考虑 i i i 在所有操作中都没被翻转的情况,它最终期望位置为 i i i,而都不被包含的概率又如何算?考虑一次操作中不被包含,则概率 q = 1 − i × ( n − i + 1 ) C n + 1 2 q=1-\frac{i\times (n-i+1)}{C_{n+1}^{2}} q=1−Cn+12​i×(n−i+1)​。它的含义是剔除掉所有区间翻转方案中翻转到 i i i 的概率。

所以最终 E ( i ) = q × i + ( 1 − q ) × n + 1 2 E(i)=q\times i+(1-q)\times \frac{n+1}{2} E(i)=q×i+(1−q)×2n+1​。再将其代入上式即可得到答案,代码并不长,注意取模即可。

至此,我们终于解决此题。总结这道题对我们的启发:

①:对于一些有形如 [ p i > p j ] [p_i>p_j] [pi​>pj​] 等类似逆序对,顺序对的信息,我们考虑用上述方法简化此条件。一开始不是想如何求,而是想如何可求。

②:一些让我们计算最终位置的题型中,从对称等概率的关系去考虑,可能会挖掘出意想不到的性质。

简单贴一下代码。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10,mod=998244353;
int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x*f;
}
int n,m,p[N],s[N];
int qpow(int a,int b){
	int res=1;a%=mod;
	while(b){if(b&1)res=res*a%mod;a=a*a%mod,b>>=1;}
	return res;
}
signed main(){
	n=read(),m=read();int power=0,ep=(n+1)*qpow(2,mod-2)%mod;
	for(int i=1;i<=n;i++) p[i]=read(),(power+=i*i%mod)%=mod;
	for(int i=1;i<=n;i++){
		int tmp=((1-2*i*(n-i+1)%mod*qpow(n*(n+1),mod-2))+mod)%mod;
		int q=qpow(tmp,m);
		s[i]=(q*i%mod+((1-q+mod)%mod)*ep%mod)%mod;
	}
	int res=0,C=n*ep%mod;
	for(int i=1;i<=n;i++) (res+=s[i]*p[i]%mod)%=mod;
	int ans=(power-res+mod)%mod*qpow(C,m)%mod;
	cout<<ans<<endl;
	return 0;
}
新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案) 本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。 阅读详情

相关推荐

IGV新手必看:5分钟搞定ChIP-seq/DAP-seq/ATAC-seq数据可视化(附常见报错解决方案)

本文为IGV新手提供了一份快速上手的实战指南,详细讲解了如何高效完成ChIP-seq、DAP-seq、ATAC-seq等数据的可视化。内容涵盖软件安装、基因组导入、文件格式转换与优化,并重点剖析了“导入后一片空白”等常见报错的根本原因与解决方案,帮助用户在5分钟内避开雷区,生成可用于发表的IGV专业图谱。

weixin_29198045的博客 539

【学习笔记】[ARC154E] Reverse and Inversion

已经缺乏深邃的观察力了。

cqbzlydd的博客 731

从气象预报到物流规划:多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用

本文深入探讨了多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用。通过对比传统GWR模型,MGWR的核心优势在于能识别不同解释变量的独特空间作用尺度,有效解决空间异质性问题。文章结合气象预报误差修正与物流网点选址两个案例,详细讲解了从数据准备、参数设置、带宽优化到结果解读的全流程,为地理数据分析师处理复杂空间数据提供了强大工具。

egg99的博客 1030

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 197

英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析

本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。

weixin_29170327的博客 523

DoDAF2.0与UAF1.0与UPDM与IBD与Rhapsody与MagicDraw与SysML

参考:fr=ge_alafr=ge_ala。

计算机辅助工程 1420

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 307

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 567

【8】mctp & pldm

异步会check seq,保证不丢包,虽然发一条req,不用等,但是不能发下一条req,等上条response回来后才能发下一条。TO(tag owner)=1是request,TO=0是response,但是异步通信response由0改为1。如下还有kcs,i3c,serial等。

持续更新ing... 1080

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值)【含Matlab源码 4887期】

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值) 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 810

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 712

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 748

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 82

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 177

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 326

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 151

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 42

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 399

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 171

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 180

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 332
上一篇: P3810 【模板】三维偏序(陌上花开)
下一篇: 线段树合并基础
summ1ts
博客等级 码龄3年 567粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值