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

      经ooo提醒咕题解会掉rp

      我反正也冒着改不完题的风险,就开始颓博了

      话说好久没这么舒坦的垫过底了233

      

      上来一看T1,立刻就转化题意为有奇偶性和距离限制的bfs

      然后就没考虑子串不能越过母串边界的事,当成单调队列裸题做了..

      由于能力有限,连单调队列都调了很久

      大样例过不去,还坚信是大样例错了

      最后发现自己伪了,结果心态直接爆炸

      觉得自己这场完了,甚至没有再考虑一下T1能拿57的$n^2$暴力

      三道题都打了指数暴力+一些无脑qj

      T1指数还挂了233

      

      怎么说呢,算上昨天的内存爆炸,我这两天可以说是相当的没状态

      也许是对自己的期望过高了

      而且看见没思路的题就容易炸心态

      害怕调暴力浪费时间,其实是好高鹜远想直接拿100(然而这次这种策略失败了

      暴力该打还是要打的,至少能拿>40分的暴力值得一打

      如果正解没思路则必须打,可能会成为想到正解的灵感啥的,可以稳住心态和节省对拍暴力

      我这么劝自己都劝了多少次了

      

      T1 Reverse

        注意子串只能是母串的一部分

        所以bfs时会受到两种限制

        set保证复杂度

      T2 Silhouette

        神仙的容斥原理。

        考虑将两个限制排序,从大到小计算。

        为什么是从大往小,因为题目限制了最大值,所以每行每列后续可以无限制地放置较小的数,但不能放置更大的数

        也就是说先计算的不会受到后计算的限制

        

        发现排序后面临这样一个子问题:给定一个区域,保证其每行每列的最大值都为一个定值S的方案数

        发现这个区域一定是矩形和L形

        考虑一个$a*b$的矩形,我们要求出$g(0)=恰好有0行的最大值达不到S的方案数$

        考虑容斥,设$f(i)=至少有i行的最大值达不到S的方案数$

        由于按行容斥,我们必须保证每一列必须合法

        对于这个矩形,每一列又是等效的

        $f(i)=sum limits_{i=0}^a C_{a}^i * (S^i * ((S+1)^{a-i} - S^{a-i} ))^b$

        组合数的意义是钦定哪些行一定不合法,由于可以选0,S的i次幂表示这一列的那i行一定不能选到S,S+1的次幂表示可以选到S

        那么$(S+1)^i - S^i$表示这一列至少选到了一个S,由此保证了此列一定合法

        又因为保证了有i行选不到S,剩下的行不确定,所以保证了至少i行不合法。

        则$g(0)=sumlimits_{k=0}^a (-1)^k * f(k)$

        为什么不是$g(0)=f(0)-f(1)$?

        考虑计算$f$时,你乘上的系数$C_a^i$

        这代表你的f是 钦定一个大小为i的集合的行不合法,其余乱选不确定和不合法 的方案和

        每个集合被平等地计算,那么对于一个$j$行不合法的方案数$(j>i)$,他在这个f里被计算了$C_j^i$次

        我们要使所有大于0的$j$都被计算0次,观察在每个i里被计算的次数

        $  i  time(eg:3)$

        $  0  C_3^0 = 1  $

        $  1  C_3^1 = 3  $

        $  2  C_3^2 = 3  $

        $  3  C_3^3 = 1  $

        $(-1)^k$的系数是不是比较显然

        用二项式定理也挺好证明的

        
        考虑拓展到L形,L形的特点就是伸出去的两条线所在的行/列的lim一定大于此时的S

        也就是:那些行/列在之前已经被满足,不必强迫他们必须选到S

        所以我们容斥时,只需要枚举交集部分矩形的行数(只有他们可能非法),而计算横向伸出去的方案数时也不必保证此列选到S,所以柿子成了

        $f(i)=sumlimits_{i=0}^a C_a^i * (S^i*((S+1)^{a+c-i}-S^{a+c-i}))^b * (S^i * (S+1)^{a-i})^d$

        设交集部分为a行b列,向上伸出c行,向右伸出d列

        然后这题就没了,由于每一行只会被枚举到一次,快速幂需要log,总复杂度$nlogn$

      T3 QWQ

        鸽鸽鸽鸽鸽鸽鸽鸽鸽

  • 相关阅读:
    Hello, Fedora.
    Android与Linux分道扬镳
    VIM教程V1.5梁昌泰
    强大的NTFS文件系统
    Linux下的cc与gcc
    g++与gcc的区别
    Fedora下解压缩的相关问题
    The GNU C Reference Manual
    Linux Kbuild文档
    实验一:计算机是怎样工作的
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11622686.html
Copyright © 2011-2022 走看看