zoukankan      html  css  js  c++  java
  • 省选测试38

    A.选拔赛

    既然(a)(c)的顺序不影响那先把a和c按从大到小排序

    (a)组中前(k)大为(A)(a)组中后(n-k)(B)

    一个很显然的思路是枚举(A)中最低分是几

    但是发现不好做 所以转为枚举(A)中最低分最少是几的方案数

    假定现在要求(solve(L,R)) 表示(A)组中的数大于等于(L)(B)组中的数小于等于(R)的方案数

    那么(A)组中最低分是(x)的方案数显然可以是(solve(x,x)-solve(x+1,x))

    那考虑如何去求(solve(x,x))

    首先预处理出来两个数组(y,z)

    (y_i)表示对于(c_i)这个数 有多少个A中的数满足(a_j + c_i >= L)

    类似的

    (z_i)表示对于(c_i)这个数 有多少个B中的数满足(a_j + c_i <= R)

    既然a,c已经排序过了

    那么一个很显然的事情是,(y_i)随着(i)的增加单调下降

    (z_i)随着(i)的增加单调上升

    另一个很好的性质是, (y)(z)虽然会变化, 但是小的永远只包含在大的里面

    这时候考虑统计方案的方法, 显然正着做 每次选择可能会占用后面选择就很难做

    所以考虑倒着统计方案,发现这样每次选择一定会占用前面的一个选择,就很可做了

    最后通过这个可以列出一个dp,(dp(i,j))表示共分配好了(i)(c),其中有(j)个给了A组

    (dp[i][j] = dp[i-1][j-1] * (y[i]-(K-j)) + dp[i-1][j] * (z[i]-(i-j-1)))

    dp转移的意思就是考虑第(i)(c)和哪组配对

    如果和(A)组配对,因为它是第(j)个选的,所以按照倒着做的思想 后面已经占用了(K-j)个位置 当前位置有(y[i]-(K-j)))(a)可以配对

    如果和(B)组配对,因为(z)是单调上升的,所以应该正着做, 此时前面已经占用了(i-j-1)个位置,当前位置有(z[i]-(i-j-1))(a)可以配对

    dp之后返回(dp_{n,k})就是要求的方案数了




    B.跳跃

    考虑预处理出来(L[p][k][i])表示(i)(i+2^k-1)位置跳(p)步的最左能到哪里

    类似的(R[p][k][i])表示(i)(i+2^k-1)位置跳(p)步最右能到哪里

    首先(L[0][0][i])(R[0][0][i])是显然的

    然后通过类似ST表可以得到(L[0][k][i])(R[0][k][i])

    然后倍增的去求出(L[p][k][i])(R[p][k][i])

    最后二分统计答案

    考虑如何计算一个答案(w)是否合法

    首先对于每个(i)求出其(w)步能跳到的左右端点(tL[i],tR[i])

    这个可以用二进制拆分和ST表实现

    然后考虑一个点对((x,y))合法的条件(d(x,y) > w)(d(y,x) > w)

    那么这时(w)就是可行解

    上面条件可以类似的转化为

    (L(x) > y)(R(y) < x)

    (L(y) > x)(R(x) < y)

    这两者之一满足条件则点对合法

    对于(j < tL[i]),我们要统计他们中的(tR)的最小值

    对于(j > tR[i]) , 我们要统计他们中的(tL)的最大值

    所以对(tR),(tL)分别做一个前缀最小值和后缀最大值就好了




    C.切蛋糕

    计算几何

    维护一个vec表示此时有效的点,按极角序排序, 边就是相邻两个点

    其中记录一个op表示它和前面的点的连线是直线还是弧线

    每次加入一条边 先统计其与圆的两个交点

    然后挨个去扫vec中的每个点,判断直线是否与该线有交,如果有交则记录下来

    然后看该直线和此时有效的线的交点是否小于2,如果小于2显然不会切掉任何东西,直接继续就可以

    如果等于2,表示切掉了一个区域

    用刚刚记录的两个交点, 把两个交点中间的点都清掉,然后把这两个点加入

    op根据实际情况判断 然后加入就可以

    加入完再重新sort一遍 得到新的vec

    最后统计答案只要按照op,把每个线的长度加到对应的ans上就可以

    如初见 与初见
  • 相关阅读:
    解决下载文件过大而不能下载的问题.... 分类: tomcat 20091106 23:24 404人阅读 评论(0) 收藏
    javascript 的参数有长度限制吗?一个细节引起的误区 分类: 网页编程【html、js】 20091110 08:34 1673人阅读 评论(0) 收藏
    cookie的生死之道 分类: 网页编程【html、js】 20091114 03:51 364人阅读 评论(0) 收藏
    java调用存储过程 分类: java 20091112 08:46 479人阅读 评论(1) 收藏
    Boolean.getBoolean(String name)............. 分类: java 20091112 05:42 1093人阅读 评论(1) 收藏
    greatest()函数 和 least()函数 分类: 数据库 20091108 09:21 810人阅读 评论(0) 收藏
    git push u origin master和git push <远程主机名> <本地分支名>:<远程分支名>作用
    Windows下安装Memcached
    关系型数据库性能优化总结
    GridView导出为Excel乱码解决方案
  • 原文地址:https://www.cnblogs.com/HISKrrr/p/14539336.html
Copyright © 2011-2022 走看看