zoukankan      html  css  js  c++  java
  • Codeforces Educational Round 21

    A

    =w=

    B

    qwq

    C

    wvw

    D(multiset)

    题意:

    有n(n<=1e5)个数,希望通过把一个位置y的数字放到位置x上这个操作,使得新序列的某个前缀和等于总和的一半,问这样的操作是否存在

    分析:

    从前往后扫一遍,开两个multiset即可

    E(三分)

    题意:

    01背包问题,但n<=1e5,m<=3e5,1<=wi<=3,1<=ci<=1e9

    分析:

    肯定根据wi=1 2 3来分组

    可以枚举wi=3用几个,再枚举wi=2用几个,就能得到wi=1用几个

    但是这样是n^2的

    注意到枚举wi的时候,是个单峰函数,所以可以三分,就过了

    题解给了个预处理的做法,预处理出(cost,cnt1,cnt2)表示cnt1个wi=1,cnt2个wi=2物品,最优价值是cost

    这个东西是可以顺推的

    F(二分+二分图最大点权独立集)

    题意:

    每个物品有pi ci li 三属性(n<=100),你需要定一个最小的level,只能取那些li<=level的物品,能够取若干个物品使得它们的Σpi>=k(k<=1e5),但是取的这些物品中每两个的ci和必须是合数。

    分析:

    肯定先去二分一下level

    把那些ci加起来是素数的数字连起来,很明显就是要求这个图的最大点权独立集

    仔细分析发现,两个偶数加起来肯定不是素数,两个奇数加起来肯定不是素数(特殊考虑1的情况)

    所以这其实是个二分图

    所以对于一般情况就通过最大流求下二分图的最大点权独立集即可

    关于1的问题,肯定只能选一个1,就选那个pi最大的1来参与建图

    G(dp+next转移)

    题意:

    给一个字符串s,一个字符串t

    字符串s有些位置是?,你需要给?赋一些字母,使得s中t出现次数最多,输出最多出现次数

    lens<=1e5,lent<=1e5,lens*lent<=1e7

    分析:

    很明显的dp,用next进行转移

    提前对t预处理出next[i][j]表示当前匹配t的第i位,来了一个字母j和其匹配,那么接下来指针会移到哪个位置

    然后就dp[i][j]表示匹配s的前i个字母,匹配t的前j个字母,t在s中的最多出现次数

    转移的时候如果遇到?就枚举26个字母,否则就用本身字母转移

    时间复杂度O(lens*lent*26)

  • 相关阅读:
    NET CORE 数据库迁移
    VUE3.0 解析svg文件
    关于ElementUI的样式不生效
    git命令
    vue 2.x的跨域问题
    Putty 重新启动 linux sqlserver服务
    aspnetcore之session
    Syncfusion 在 core 的架构
    TortoiseSVN创建/合并分支
    正则表达式知识点整理
  • 原文地址:https://www.cnblogs.com/wmrv587/p/6876314.html
Copyright © 2011-2022 走看看