zoukankan      html  css  js  c++  java
  • 6.15模拟赛赛后总结

    6.15模拟赛赛后总结

    赛时历程

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

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

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

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

    赛后发现

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

    这一栏就这样结束了。

    技术总结

    T1 是一个状压,压的方式,不是那种很基础的。题目中的操作数 (mle10) ,所以考虑状态设计和(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,还要矩阵加速,战略放。

  • 相关阅读:
    idea 配置 scala
    Error contacting service. It is probably not running.
    ipc.Client: Retrying connect to server: .../10.0.0.27:10020. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
    hadoop安装配置
    WordCount-JAVA版
    scp、rsync、xsync
    我所经历的开题
    无情的岁月之流水一般的一年级
    数据挖掘中易犯的几大错误【转载,侵删】
    如何摧毁程序员的效率?【转载,侵删】
  • 原文地址:https://www.cnblogs.com/mikuo/p/14887647.html
Copyright © 2011-2022 走看看