码迷,mamicode.com
首页 > 其他好文 > 详细

6.15模拟赛赛后总结

时间:2021-06-16 17:55:50      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:概率   没有想到   子集   它的   加速   mat   端点   元素   状压   

6.15模拟赛赛后总结

赛时历程

早上七点十来分看到题,准备了一波就七点半了。

看题的感觉是这样的,T1看上去数据范围倒是挺小,但并没有想到状压,因为 \(n\le40\) ,以为是什么神奇的多项式做法。
T2一眼感觉麻烦,T3一眼感觉不可做。

想到一个T1的假思路,打了一会儿发现求出来的东西并不会用。

九点转而看T2,首先想最低档暴力可以\(4^{10}\)状压,非常好,但显然也可以有更方便的暴力,于是起点提高了一点,想搞\(n^2\)暴力,拿到\(62\)分,结果是写了一晌写假了,实在是想不到了,于是放弃之后,转而去想一个\(n^3logn\)的暴力,可以拿到33分。
结果就倒腾到11点了。T3和T1都不知所措,故以33分终了。

赛后发现

1 所有打的分都拿到了 只有33分,然而后边两个人写挂的分多了点,竟然没有rk倒一。

这一栏就这样结束了。

技术总结

T1 是一个状压,压的方式,不是那种很基础的。题目中的操作数 \(m\le10\) ,所以考虑状态设计和\(m\)有关。直接考虑每一步的最大值,牵扯到太多情况,不如考虑每个位置都进行了那些步骤的操作,然后将每个位置的操作状态给合并起来。具体来说,枚举每个位置,设置\(f[i][s][j]\)表示考虑前\(i\)个位置,对它进行操作的状态是\(s\)(操作在前i个位置就是1,不在就是0) ,最大值是\(j\) 的概率,那么再设置一个辅助数组\(g[t][j]\) 表示当前位置下,操作状态为\(t\),得到的值为\(j\) 的概率,这个转移比较简单,\(g[t][j]\)可以从任意\(g[t的子集][j-c]\)乘上相应的概率得到,这里一定要是任意一个子集,而非所有子集,因为同一个位置的同一状态,概率的乘积不受计算顺序的影响,然后 \(f[i][s][max(j,k)]=sum\{f[i-1][s\ xor\ t][max(j,k)]*g[t][k]\}\) ,枚举s的子集然后枚举相应的最大值j,k进行转移就好。最终把所有的\(f[n][(1<<m)-1][j]\)给统计到ans里即可。

T2 是一个扫描线,这个扫描线需要发掘一个性质,即周长的最小值是\((max(w,h)+1)*2\) ,随意找两个点然后搞一个缝就可以做到,反证一下,考虑找到一个占总面积四分之一的矩形,它的周长最多也就是\(w+h\),也就是说只能是小于上述周长最小值,那么想要找到一个更大的答案,一定是要跨过(0,w)或者(0,h)的中线的。考虑枚举右端点,上下边界的两个y一定跨过 \(\frac{h}{2}\), 然后用两个单调栈,一个只考虑大于y维护从左到右的y的单调上升,一个维护小于y的从左到右y的单调下降,

每加入一个点\(i\),都考虑栈的单调,如果这个点的y是高于\(\frac{h}{2}\) 的话,那么就只考虑单调上升栈,弹出栈内元素的时候,先考虑这个栈内的点作为上边界,把它和栈顶内的点的高度差累计到线段树中,作为增量累计到同样的区间内,然后每次查一个区间最值作为纵向的最大值然后加上一个i+1的作为横向的值来更新答案。

T3 动态DP,还要矩阵加速,战略放。

6.15模拟赛赛后总结

标签:概率   没有想到   子集   它的   加速   mat   端点   元素   状压   

原文地址:https://www.cnblogs.com/mikuo/p/14887647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!