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

    T1:

      题意:

        求区间取模后的最大值。

      题解:

        我的思路有些清奇。

        标算分块,预处理出每个块对于所有K取模后的最大值,然后分块暴力找即可。

        时间复杂度$O(Nsqrt{Nln N})$

        我的思路是对于K分情况。

        当K<=50时,用st表暴力找,开50是因为内存实在不够了

        对于其他情况,暴力搜索所有形如$[aK,(a+1)K)$的区间,主席树上dfs找出区间最大值,需要剪枝

        如果复(shu)杂(ju)度(hen)优(shui)秀的话,就可以AC了。

        时间复杂度$O(Nlog_2Nsqrt{N})$

    T2:

      题意:

        坐标系内有N个点,求满足以下条件的折线数,对1e9+7取模。

        对于折线经过的点(x1,y1),(x2,y2)......(xk,yk)。

        $forall j in (1,k]   y_j < y_{j-1}$

        $forall j in (2,k]   x_{j-2} < x_j < x_{j-1}    or   x_{j-1} < x_j < x_{j-2}$

      题解:
        考虑对于x进行DP,现将所有点按照x排序。

        设dp[i][0/1]为目前在第i个点,下次折线向左/右延伸的方案数。

        从左到右枚举所有点,然后倒序枚举之前的点。

        当前节点可以和之前所有纵坐标大于它的点连边。

          $dp[j][1]+=dp[i][0] (y_j > y_i)$

        之前所有纵坐标小于当前节点的点可以和它连边连边。

          $dp[i][0]+=dp[j][1] (y_j < y_i)$

        因为自下而上横坐标跨度不断增大,所以要倒序枚举第二维保证正确性。

        时间复杂度$O(N^2)$

    T3:

      题意:

        给一个0/1矩阵,初始时有有一个全0矩阵,每次可以将任意个四连通的0/1连通块染色,求最少多少次操作后能得到目标矩阵。

      题解:

        首先,染色的过程是可逆的,所以我们可以回溯染色过程。

        然后考虑如何染色最优。

        我们设从一点到所有点所经过的0/1边界数的最大值为层数。

        所以每次染色只有消除一层才是最优的,所以要使染色的联通块最大化。

        每次染完一次,该点的层数减一,继续染色,直到层数为0为止,这时矩阵一定为全0的。

        不同点的层数可能是不同的,所以我们求出最小的层数,就是答案。

        枚举每个点,从该点开始进行双端队列BFS,若经过0/1边界,则距离为1,从队尾入队,反之从队头入队。

        到每个点的距离的最大值即为层数。

        注意:因为初始状态是全0,而不是全1,所以在BFS后对所有到1点的距离加1,在取最大值。

        不同点的层数取最小值即为答案。

        时间复杂度$O(n^4)$

  • 相关阅读:
    10.C语言_Switch语句
    9.C语言_运算符和表达式分支语句
    问题是:js是如何实现鼠标移动到不同栏位切换对应的显示内容的?
    初识JavaScript,Ajax,jQuery,并比较三者关系
    使用母板页的内容页中js脚本应该放在什么位置,怎么调用
    如何让图片太大时自动缩小显示?
    网页视频播放器代码大全 + 21个为您的网站和博客提供的免费视频播放器
    flvplayer.swf flv视频播放器使用方法
    FileUpload检查上传文件扩展名,限制大小,创建路径存储
    几种代码生成器的叙述
  • 原文地址:https://www.cnblogs.com/hz-Rockstar/p/11566629.html
Copyright © 2011-2022 走看看