zoukankan      html  css  js  c++  java
  • 二模 (4)day2

    第一题:

    题目大意:给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。 N<=100000

    1.考虑到一个符合要求的连续子序列中,比b大的数的个数和比b小的数的个数相等。对于一个符合要求的区间[L,R], 设[L,pos_b-1]中比b大的数有x1个,比b小的有x2个,区间[pos_b+1,R]中比b大的有x3个,比b小的有x4个,那么肯定满足x1-x2==x4-x3。

    2.处理出满足x1-x2=x的区间[L,pos_b-1]的个数存在Left[x]中,同理处理出满足x4-x3=x的区间[pos_b+1,R]的个数存在Right[x]中,那么ans=sum{(Left[i]+1)*(Right[i]+1)}.

    初始得分100


    第二题:

    题目描述:

    在一个凹槽中放置了n层砖块、最上面的一层有n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示:

    规定最上面的为第1层,最左边的是第一块砖。

    如果你想敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它;若i>1,则你必须先敲掉第i-1层的第j和第j+1块砖。
    你现在可以敲掉最多m块砖,求得分最多能有多少。 1≤n≤50,1≤m≤500

    解题过程:

    1.考虑到某块砖头能否打掉,和它右边那一列的状态有关,所以规定打的顺序是从右往左。状态表示三维,一维是打到第i列,一共打了j个砖头,且第i列打了k个的最优解。转移枚举右边那一列(第i+1列)打了多少砖头。。

    2.时间复杂度O(N^3*M),初始得分80,没有处理好边界。


     第三题:

    题目描述:给出了一张有N个点M条边的加权有向无环图,接下来有Q个询问,每个询问包括2个节点X和Y,要求算出从X到Y的一条路径,使得密度最小(密度的定义为,路径上边的权值和除以边的数量)。

    1≤N≤50,1≤M≤1000,1≤W≤100000,1≤Q≤100000。

    解题过程:

    1.看到N的范围比较小,那肯定是和Floyd有关系的算法。。因此改造一下Floyd,F[i][j][k]表示i到j经过k条路的最短路。

    F[i][j][k]=min{F[i][p][k-1]+F[p][j][1]};

    2.初始得分30. 被 询问(x,x)坑掉了,应该输出"OMG!",我输出的是0.

  • 相关阅读:
    The Network Adapter could not establish the connection问题研究
    条件更新或插入
    如何解决Oracle临时表空间过大
    oracle的临时表空间写满磁盘空间解决改问题的步骤
    如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp
    oracle mysql sql 根据一张表更新另一张表
    Don’t Repeat Yourself,Repeat Yourself
    mysql oracle sql获取树 父级 子级 及自己
    hutool BigExcelWriter 下的autoSizeColumnAll异常问题
    Java手写数组栈
  • 原文地址:https://www.cnblogs.com/vb4896/p/3984329.html
Copyright © 2011-2022 走看看