模拟82 题解

A. D2T1

因为最终答案只需要大小为$n$的排列的返回值的期望。

我们并不关注排列内部的内容。

所以不妨设长度为$n$的排列的返回值的期望为$f_n$,长度为$n$的排列的逆序对个数为$g_n$。

那么有$f_n=\frac{\sum \limits_{i=0}^{n}\binom{n}{i}*f_i}{2^n}+g_n$。

显然随机排列中正序对和逆序对个数应当是相同的,并且二者相加为$\frac{n*(n-1)}{2}$,故$g_n=\frac{n*(n-1)}{4}$。

然而受到$D1T2$的启发,我们应当也可以想到$g_n$的另一个求法。

考虑从大到小插入每一个数。

那么插入第$i$个数的贡献为$\frac{\sum \limits_{j=0}^{i-1}j}{i}$,分别表示插入到第$j$个空位造成的逆序对贡献。

由此我们是可以推出上式的。

于是我们可以$O(n^2)$解出$f_n$,对$f_n$作前缀和后除$n$即为$ans_n$。

显然有了这个算法后,我们应当打表。

然后就会发现$f_n$这个函数就非常好,对它邻项作差一次立刻变成了等差数列。

也就是说它必是二次函数,所以$f_n$的前缀和必为三次函数。

所以设$s_n$为$f_n$的前缀和,$s_n=a*x^3+b*x^2+c*x+d$。

分别代入$x=1,2,3,4$,可以解出$a,b,c,d$,除$n$之后我们就得到了答案。

$AC$之后重新看题,考虑式子的实际含义。

不妨考虑每个逆序对,设它的贡献为$x$。

那么有$x=\frac{1}{4}*x+1$,可解得$x=\frac{4}{3}$。

由逆序对的期望个数$\frac{n*(n-1)}{4}$,二者相乘可得$f_n=\frac{n*(n-1)}{3}$。

用自然数幂和公式求和可得到我们刚才暴力消元解出的答案。

B. D2T2

看完题并没有思路,只会大力枚举,用哈希表骗分。

正解要枚举后缀与前缀之间的断点,这个做法确实巧妙多了。

用$trie$树暴力匹配,复杂度就做到$O(n*len)$了。

正解的做法更加巧妙一些:

首先建前后缀共两棵$trie$树,$trie$树上的节点$sz$对前缀求和。

将两棵$trie$树上节点对应的哈希值分别插入哈希表中,映射到对应的前缀求和后的$sz$。

之后可以对原字符序列进行二分,通过哈希表中能否查询到值$check$,求出最靠左的左端点和最靠右的右端点。

二者相乘是该断点贡献的答案。

C. D2T3

部分分似乎确实在提示,要满足题中的要求,会存在一些特殊性质。

当$k$比较小的时候,答案可以大力分类讨论。

当$k$比较大,答案一定只表现为一种情况:$k$个皇后在同一线上。

题中的模数比较小,所以可以用$lucas$定理搞。

为了求和一些奇怪的式子,我们还需要大力拆式子,用自然数幂和讨论。

原文地址:https://www.cnblogs.com/skyh/p/11722492.html

时间: 2024-10-08 15:24:47

模拟82 题解的相关文章

HDU 1022 Train Problem I 模拟栈题解

火车进站,模拟一个栈的操作,额外的栈操作,查看是否能按照规定顺序出栈. 数据量很少,故此题目很容易AC. 直接使用数组模拟就好. #include <stdio.h> const int MAX_N = 10; char inOrder[MAX_N], outOrder[MAX_N], stk[MAX_N]; bool rs[MAX_N<<2]; int n; int main() { while (scanf("%d", &n) != EOF) { s

10-4国庆节第七场模拟赛题解

10-4 国庆节第七场模拟赛题解 T1工厂 (factory) 水 #include<iostream> #include<cstdio> #define int long long using namespace std; inline int read(){ int sum=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0

2018-10-25 模拟测试题解

目录 问题 A: 魏传之长坂逆袭 题目描述 输入 输出 样例输入 样例输出 题解 问题 B: 蜀传之单刀赴会 题目描述 [问题描述] 输入 输出 样例输入 样例输出 题解 问题 C: 吴传之火烧连营 [题目背景] [问题描述] 输入 输出 样例输入 样例输出 [样例解释] [数据规模和约定] 题解 本篇题解也发表于zwcblog作者是同一个人 问题 A: 魏传之长坂逆袭 题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁.占有荆益.成就霸业

10月15日模拟赛题解

10月15日模拟赛题解 A 树 Description 给定一棵 \(n\) 个节点的树,每个节点有两个参数 \(a,~b\),对于每个节点,求子树中参数为 \(b\) 的所有节点的 \(a\) 之和 Limitations \(100\%\) \(1 \leq b \leq n \leq 10^5,~a \leq 1000\) \(60\%\) \(1 \leq b,n\leq 1000\) \(30\%\) \(1 \leq b, n \leq 10\) Solution 对于 \(30\%

NOIP模拟 8-21 题解

一份模拟题...水得要命真是没谁了. 减法 (sub.c/.cpp) 题目描述 东东在幼儿园刚刚学会了 20 以内的减法,就迫不及待的跑回家要给爸爸出题了.问“10-1”来考东东爸,东东爸想也没想就说是“1”.东东顿时喜笑颜开,臭爸爸连这都不知道.那你知道为啥么?嘻嘻,当然这不是题目了. 这回换东东爸出题了: 两个整数 A 和 B,问 A-B 的结果是多少. 其中 1<=A<=101000, 0<=B<=A. 东东一脸懵圈,说:“臭爸爸,我不会,你告诉我结果吧.“ 这回轮到东东爸懵

lzoi模拟赛题解

A题:签到题原题:mtoi 联赛 的A题定位:真.签到题(普及B题或者提高d1A题)考点:选手的基本数学能力思维难度:提高-代码难度:普及A题 题解:80%:暴力枚举100%:注意到(a xor b)<=(a+b),于是把所有的数异或起来即可. B题:送分题原题:[多省省队联测]d2A:皮配定位:一道联赛d1B题,考察了选手的基本功.送了选手70分.把70%的2种做法扩展可以得到正解考点:多种背包dp,计数思维难度:提高代码难度:提高+ 前面的几个数据可以暴力枚举解决.50%的数据:考虑dp.设

计蒜课 八月模拟赛题解

看见机房有大佬上周写了上面的普及信心赛 于是我康了康 8月的提高组模拟赛 9月的还没开始qwq 真的 有点难 主要是我先打开了T2 我再次 对自己的数学产生了怀疑 我现在还是不会写T2 T1 又又又又都错题了 下次重建图 尽量写vector 都写 邻接表 变量差不多的容易搞混 我这个同学变又写错了 T1 :https://nanti.jisuanke.com/t/41086 题目大意就是 一个有向图 删一个点 把与他直接和间接 相连的点 删掉 然后 求删掉所有点的最小最大代价 : 为了避免这个环

csp-s模拟99题解

题面:https://www.cnblogs.com/Juve/articles/11791219.html 上来先看T1,发现和之前做过的treap一样,是线段树维护单调栈,然后打了一个小时,然后它挂了 于是看后面的题,然后T2:woc它说的是什么?怎么这么多变量?貌似k=2可以大力分类讨论? 写了半个小时,发现恶心至极,然后puts("-1")就跑了 T3好像有暴力?打了个搜索,一遍过样例,应该有40分了吧,在加上T1暴力就60分了 突然发现T1可以分块直接艹过,果断分块,然后过样

省选模拟6 题解

A. Yist 首先考虑怎样的情况答案是不收敛的. 操作中涉及到对一个权值非$0$,并且不作除法的点的加法贡献. 因为只要最终的答案,可以想到对每个点作为出边的贡献分别处理. 部分分提示求出第一次迭代的贡献,发现对于每个点,贡献都是一个等比数列,所以只要代入求和公式就好了. 然而暴力做的复杂度是$O(mk)$的,会被菊花图的数据卡掉. 考虑如何优化这个东西,根据套路我们将点按照度数分块. 定义度数大于$\sqrt m$的点为重点,度数小于等于$\sqrt m$的点为轻点. 分别讨论: 对于对轻点