zoukankan      html  css  js  c++  java
  • CSPS模拟测试59

    这场考得我心态爆炸。。。。。。。。。

    开场T1只会$n^{2}$,然后发现bfs时每个点只需要被更新一次,其他的更新都是没用的。

    也就是说,我们可以只更新还没被更新的点?

    于是我先YY了一个链表,发现在链表中删除一个数之后,用它更新其他点的时候,就没有办法找到它的前趋后继了,用之前的可以被卡成$O(n^{2})$,大样例都跑了2s+,然后就死了。

    然后才想到set,可以保证每个点只被更新一次,然而发现我对set一无所知,一直以为begin指向为空,而end指向最大元素,调了好久,后来发现是反的。。。。

    然后处理的时候又出了问题,仍然没有保证每个点只被更新一次,此时大约过去了2h,心态还是很崩的。

    然后把奇偶分开,发现还是不行,最后终于发现每个点的左右边界定的过大了。

    于是,在开考2.5h后,我终于自认为A掉了T1。

    赶紧去打了T2暴力,突然想到回去给T1打个对拍,发现某些数据跑的还是很慢!(虽然从赛后看此时已经A了)

    优化了一下,稳定在了0.1s,此时还剩5min,去打了个T3的8pts就没了。

    T1

      上面说过了。

    T2.

      首先一个非常显然但我没有看出来的结论:顺序不影响结果(因为不管怎么排序,任意横纵两排都会有一个交点)

      然后我们将所有值从大到小排序,可以发现,在比它大的数填完之后,每个值能够填的区域是一个L形(矩形也算L)

      只有L中间的矩形需要保证合法,因为其他地方的合法性已经在之前保证了,当前值也无法满足那些位置。

      也就是说,我们当前只需要保证矩形所在的行和列合法。

      令矩形为$a*b$,上面的部分长为c,下面长为d

      直接计算不容易,我们考虑容斥

      将L拆成两个小矩形,那么在保证所有列合法的情况下,令$f[i]$表示至少有i列不合法的情况。

      容斥系数:$ans=sumlimits_{i=0}^{a}{(-1)^{i}f_i}$

      我们考虑如何计算f[i]

      $f[i]=inom{a}{i}*(s^{i}*((s+1)^{a+c-i}-s^{a+c-i}))^{b}*(s^{i}*(s+1)^{a-i})^{d}$

      用这个式子暴力算就行了,应该挺好理解的

  • 相关阅读:
    Can't remove netstandard folder from output path (.net standard)
    website项目的reference问题
    The type exists in both DLLs
    git常用配置
    Map dependencies with code maps
    How to check HTML version of any website
    Bootstrap UI 编辑器
    网上职位要求对照
    Use of implicitly declared global variable
    ResolveUrl in external JavaScript file in asp.net project
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/11622698.html
Copyright © 2011-2022 走看看