题解 六省联考2017

题目顺序不是做题顺序也不是考试顺序更不是难度顺序,是随机顺序。

为了不影响观看体验决定把代码删去,需要请私信我,QQ或博客园皆可。

题目里的难度评分是个人评分,仅供参考开心就好。

期末考试

难度评分:提高

题意是给定期末考试每门课的出分时间和学生希望的出分时间,如果学生要等就会有不满意度。你可以进行老师的增加和调换操作,但是都会产生不满意度。请最小化不满意度。

先考虑学生的不满意度怎么算:

设\(F_i\)表示以第\(i\)天结束学生们不满意度的总和,则\(F_i-F_{i-1}=\)第\(i\)天学生们的不满意度总和。

\(F_i=Σ_{j=1}^n Max(0,i-b_j)×C\)

发现数据范围不大,考虑预处理这个式子,很显然就是个前缀和。

然后再考虑安排老师。分类讨论一下。

若\(A \geq B\),肯定优先选择\(B\)操作,即加老师,这样只会使得结束时间都提前。

若\(A<B\),肯定优先选择\(A\),\(A\)用完了再用\(A\)只会使答案变劣的时候用\(B\)。

考虑用\(A\)的最多次数:假设第\(i\)天结束,则所有结束时间比\(i\)小的都可以贡献老师出来,这就是使用\(A\)的最多次数。可以用前缀和预处理出来。

由于数据范围不大,前缀和计算又是\(O(1)\)的,直接枚举结束日期计算即可。

复杂度\(O(maxn)\),\(maxn\)表示最晚结束日期。

 

组合数问题

难度评分:普及+

题意是给定\(n,k,r,p\),求\(Σ_{i=0}^∞\ \ C_{nk}^{ik+r}\ \ mod\ \  p\) 。

由于\(m>n\)的时候\(C_{n}^m=0\),所以实际上\(i\)只要从\(0\)~\(n\)枚举即可。

看起来就很休闲,你会\(Lucas\)就发现送了\(60\%\),预处理一下阶乘和逆元,枚举\(i\)就可以了。

然后注意到\(n \leq 10^9,0 \leq r \leq k \leq 50\),于是想到矩阵加速。

组合数的式子是现成的,可以把意义从“\(i\)个里面选\(j\)个”改成“\(i\)个里面选\(x\%K==j\)个”,直接套用即可。

 

就是构造上图的矩阵,发现初始值为\(0\)所以不要管了,直接把中间的做个快速幂,然后就做完了。时间复杂度\(O(log(nk))\)。

 

分手是祝愿

难度评分:提高+

题意是有一些给定初始状态的灯,希望他们都灭掉。按下一个开关会影响它及它约数的状态。开始随机按一些开关,如果最后剩下需要的步数\(<=k\)就用最优解按。求期望次数\(×n!\)

首先明确怎么算最优解:我们按开关只会影响比它小的,所以我们从大到小按开关,就是枚举每个\(i\)的倍数放进\(vector\),这个复杂度是调和级数也就是\(n\ ln\ n\)的。所以我们统计答案只需要统计\(\sum_{i=1}^{need}\ f[i]\),\(need\)表示最优解下需要次数。

然后考虑随机一个按,那我们可能按到当前最优的或其他的。

按到最优解:\(\frac{i}{n}×1\),这个就表示按到对的按钮的概率为\(\frac{i}{n}\),贡献为\(1\)次(期望=概率×贡献)。

按到其他按钮:\(\frac{n-i}{n}×(1+f[i]+f[i+1])\)。这个\(1\)就表示这个按错了的开关还要重新按回来一遍以消除影响,\(f[i]+f[i+1]\)就表示还需要\(f[i]+f[i+1]\)次操作变成\(i-1\)这个状态。

然后化简一下式子移项把\(f[i]\)推出来,答案再乘上\(n!\)即可。边界为\(f[n]=1\)。注意\(f[1...k]=1\),因为\(<=k\)直接用最优解走了。时间复杂度\(O(n)\)。

 

相逢是问候

难度评分:省选+

题意是给你两种操作\(0\)和\(1\),\(0\)是把\([l,r]\)中的所有\(a_i\)替换成\(C^{a_i}\),其中\(C\)是一个给定常数;\(1\)是求\(\sum_{i=l}^r \ \ a_i\)。

这个东西肯定是线段树维护,但是单纯的线段树肯定会\(TLE\)。想到花神游历各国那题,就是区间开方用线段树维护,是找到了区间开方下取整后几次这个数就变成了\(0\)这一方法进行优化。于是考虑\(C^{a_i}\)有什么奇技淫巧。

\(a_i\)多次改变之后就成了这个样子:\(C^{C^{C^{C^{C^{a_i}}}}}\)

由扩展欧拉定理得知\(a^b\ \ ≡ a^{b\ \ mod\ \ \varphi(p)\ \ +\ \ \varphi(p)}\ \ (mod\ \ p)\)。

于是可以考虑递归求解,边界为\(p=1\)。

但是这还没完啊,我们如果每次都去递归求这个改之后的\(a_i\)还是\(TLE\)。

观察发现这个式子实际上在\(logp\)次之后值就一样了。为什么呢?考虑\(\varphi(p)\)的计算公式:\(\varphi(P)=P*\pi_{i=1}^k\ \ \frac{p_i-1}{p_i}\),其中\(p_i\)表示\(P\)的每个质因子。若\(P\)为偶数,则\(P\)变成\(\varphi(p)\)至少要\(÷2\);若\(P\)为奇数,\(p[i]-1\)必存在偶数,于是\(\varphi(p)\)也为偶数。由此证明\(logp\)次后值就一样了。于是我们就像花神游历各国那题一样直接维护出现次数\(Min\),一旦这个\(Min\)达到了边界我们就不继续进入子区间搞了。

一个优化就是预处理\(C\)的幂次方,把快速幂的\(log\)给去掉。于是时间复杂度为\(O(nlog^2n)\)。

 

摧毁“树状图”

难度评分:省选+

题意是选出两条不相交的链,删去与这两条链相关的边,最大化连通块数量。

发现它有\(x=0,1,2\)三个\(subtask\),其实会\(x=0\)就会\(x=1,2\)了。

考虑如何计算连通块个数:

\(S\)表示选出点的集合,\(deg\)表示点的度数,\(edge\)表示边,\(lnk\)表示链,\(dot\)表示点。

连通块个数\(=\sum_{i∈S}\ \ deg_i\ -\sum edge \times 2 -lnk +1\)。

然后由于边数\(=\)选出来点的个数\(+\)链数,化简一下式子得知连通块个数\(=\sum_{i∈S}\ \ deg_i\ -dots \times2 + lnk +1\)。

知道这个我们就只用处理点和链了。

考虑\(dp\)。这个\(dp\)极其毒瘤要讨论很多。我看了\(shadowice1984\)神仙的题解啥也没看懂,全网搜了很多自己汇总一下,大概参考了\(shadowice1984,Starria,Vixbob\)三位神仙的博客。

现在有以下情况需要讨论:(假设当前子树的根为\(u\),孩子节点为\(v\))

·一条路径

·一条链

·一条路径+一条链

·讲不清,学\(Starria\)小姐姐画图

细节多的一批,慢慢讨论慢慢调吧\(QwQ\)。

寿司餐厅

难度评分:省选

题意是选择\(i\ \cdots \ j\)的寿司可以获得\(d_{i,j}\)的价值(\(i\ \leq \ j\)),而选择了\(x\)就要付出\(mx^2+cx\)的价值,也就是获得\(-mx^2-cx\)的价值。最大化获得价值和。

由于权值不重复计算,我们可以考虑最大权闭合子图。

最大权闭合子图的经典模型:有一些物品,选择其中的每种都会获得相应价值\(v_i\),但是有形如选\(x\)就要选\(y\)这样的限制关系,要求是最大化获得价值。(如果是最小化获得价值可以全部取相反数,仍是最大化的模型)。

这类问题一般使用最小割解决,即理想最优\(-\)调整代价。这个调整代价指的是调整为合法状态的代价。

考虑如何建图:基本模型是,对于一个点\(i\),如果它的价值\(v_i>0\),我们就把\(S \rightarrow i\)连一条边,流量为\(v_i\),\(i \rightarrow T\)连一条边,流量为\(0\),表示不选这个点需要付出\(v_i\)的代价;如果它的价值\(v_i<0\),我们就把\(i \rightarrow T\)连一条边,流量为\(-v_i\),\(S \rightarrow i\)连一条边,流量为\(0\),表示选择这个点需要付出\(-v_i\)的代价。对于所有\(x \rightarrow y\)这样的限制关系,我们把\(x \rightarrow y\)连一条边,流量为\(inf\),这样这条边就永远不会被割掉。

再考虑这题:首先发现这个记忆化是个幌子,假设方案①是拿\([1,2],[2,3]\),②是拿\([1,3]\),那么①会比②多花一个\(a_2\)的价值,所以一起选更划算。其次发现如果我们选择了\(d_{i,j}\),那么我们也要选择\(d_{i+1,j}\)和\(d_{i,j-1}\),于是考虑把\(d_{i,j}\)看成一个点,把这个看成限制关系。最关键的是处理代价\(mx^2+cx\),看成“对于类型为\(x\)的寿司,每吃一个就要付出\(x\)的代价,吃过\(x\)后再吃还要付出\(mx^2\)的代价”。于是把每种寿司类型\(x\)也看成一个点,代价为\(mx^2\),选择了\(d_{i,i}\)就必须选择\(a_i\)。那么这就是最大权闭合子图问题模型了。

 

posted @ 2020-02-20 16:10  kylin_xy  阅读(156)  评论(0编辑  收藏  举报