• 比赛


    题解:

    好像很久没写过题解了。。。

    比赛太多就不是很想写。。。。

    我重新看了几道牛客网以前比赛的题目 当然并没有写代码。。

    1.提高组第一场t3:

    当时写了线段树合并

    的确这个我觉得是最直观的

    当时就说了这个类似天天爱跑步就不再说了。。

    另一种解法是主席树

    因为这个信息是可减的

    所以直接这样搞出子树内信息就可以了

    网上还有篇题解是dsu on tree

    我没见过这么用不知道这个复杂度是不是正确。。

    我感觉应该是正确的 具体做法就是保留其中军队最多的那个儿子,其他暴力插入

    这题还是比较简单了

    2.提高组第4场t3:

    这个我觉得是个相对比较难的dp(noip显然不会出这么难得东西)

    首先按照p排序(因为肯定要排序 然后会发现按照令两个排序更难处理)

    离散化一下权值

    f[i][j]表示考虑了前i个然后第i个右端点到j

    这个状态很容易想,关键在于怎么转移

    首先我们得枚举这个人向哪喷

    它向右喷就直接转移这个比较简单

    考虑他向左喷

    想一想就会想到我们一定会去枚举前一个向左喷的人

    什么意思呢

    就是那个人的下一个人到当前人都是向右喷的

    那么它向右喷的右端点就是这一段人中的最大值

    这样这个问题就完美解决了

    因为状态n^2 所以转移要O(1) 稍微前缀和什么处理一下就可以了

    3.提高组第六场t3

    这道题很显然就不是noip的题

    很显然的是出题人把两道bzoj的合一起了

    我记得一个星期前见过原题是1,2操作吧

    首先可以把每条边看成点到父亲的边,这样变成处理点权比较方便

    修改等价于对于路径上点(除去lca)修改为col1

    路径相邻点(除去lca父亲而包括lca)修改为col2

    如果只有1操作和2操作的前半部分是树剖裸题

    考虑2操作的后半部分

    这题有个很关键的东西是只有链查询

    我们考虑假设只覆盖了一段完整的重链

    那么查询的时候就只有重链交替的地方需要判断一下父亲的标记

    查询如果在重链上一定是不会受其他不相交重链影响的

    于是我们只需要修改重链,和中间转折点相连的重链(也就是说当前点到父亲点为轻链,然后取修改父亲的重链)

    然后再在该点打标记 用来在轻链的时候查询

    最后一个问题就是轻链查询

    轻链查询的时候我们需要同时注意父亲节点处的标记和链上标记 于是我们可以加入时间戳维护先后关系

    这个考完noip写一下

    比赛1:

    牛客网NOIP赛前集训营-提高组(第八场)

    t1:

    我觉得这个题不会正解很毒瘤。。

    首先先把序列变成形如abababababababababab

    就是没有连续的a和b

    我自己yy了1个小时左右发现

    等价于找操作中的第一个a和第一个b 然后之后的a,b都可以互用

    然后就a了。。。

    正解的思路的确还是不错的

    倒着考虑

    这样变成我们只能覆盖有颜色的点了

    所以我们会先搞掉中间的a或者b

    所以这样可以证明一下我的算法是对的?

    因为一次a不仅能消掉一个a还能让两个b变成一个

    t2:

    傻逼题

    题解好像还要最短路?

    其实比较明显的扫描线维护区间最小值吧

    注意公共部分不包括端点的话就上端点都-1就可以了

    另外因为用了动态开点线段树

    开始的时候空间开4倍后来改了然后初始化没改就只有70了

    t3:暴力就是直接f[i][j]表示考虑前i个操作,然后左端点考虑到了j(这样可以推出右端点)

    倒着做,这是博弈的基本套路

    然后这样就可以n^2做了

    正解就继续搞下去。。

    有空再看。。。

    牛客OI周赛5-提高组

    1.

    这题的idea比较nb

    结论就是把每条边变成dis[u]-dis[v]+w

    证明一下这个 dis[v]-dis[u]<=w

    所以上面这个>=0

    然后两点之间最短路

    u,x1,x2,x3,v=dis[u]-dis[x1]+dis[x1]-dis[x2]...+w1+w2...

    发现就是在原基础上加了一些定值

    所以就可以啦

    我真觉得这个非常巧。。考场为什么那么多人会啊。。

    2.

    首先n^2dp人人会吧

    然后打个表就会发现转移是从n/2转移的

    暴力就可以了

    3.考试的时候没看。。考完瞄了一眼题解好像是个数学题大概没啥意思

    另外洛谷上打了两个比赛有人ac的题目。。

    发现比较水没有什么写题解的必要。。

    洛谷:

    IBvl战队的膜你赛

    8:30开始玩这个比赛。。

    然后11点多吃饭。。 1:30继续打

    我感觉被倒数第二题坑害了

    t1 xjb模拟没啥好说的了

    t2 考虑每个被计算的次数 就是合并到父亲的时候乘上每个子树可能的方案

        而每个子树的方案=$prod{每个儿子的方案}$+1

        所以我的做法还要/自己求个逆元。。这样nlogn a了

    瞄了一眼题解好像直接把前面考虑过的儿子作状态这样就可以O(n)了

    不过我记得我当时大家都只做了前两题的时候我的t2跑的挺快的呀。。。

    t3 :

    这种题一般上来就想想缩点啥的。。

    然后果不其然就是个缩强联通分量

    首先我们会发现肯定会先搞入度不为0又没有出边的点呀(因为这对其他没有影响)

    然后发现有一类情况是没有这种点的,就是强联通分量

    会发现入度为0的强联通分量最多只能搞出k-1个

    于是这题就做完了

    把强联通分量求出来再把最小的那个删去

    因为权值比较小直接搞到数组里免去排序的log

    这题简直坑爹,链的数据实测不是1000以内的,然后我wa了无数久

    (re一个点)

    然后我利用实时提交的特点才搞出了哪里re才知道了这件事情。。

    t4:

    中午回来看了一下题意。。。

    首先4操作就是个傻逼操作我们忽略它。。(树状数组或者线段树都能维护)

    首先化简一下操作 把每个操作的贡献写出来

    会发现等价于维护区间ab和,支持a区间修改,b区间修改

    打算开始写题发现已经2点。。

    然后又没人过第二题。。然后70分基本是送的

    其实像去年noipd2t3

    80分说实话比正解好写好想多了

    所以考试写什么还是根据时间来定比较稳

    于是开始写暴力(毕竟性价比比较高)

    感觉一下就知道这题就算我会正解也要搞很久。。

    毕竟当时已经有人a了最后一题了

    于是写了暴力+后面一个没修改的点 发现多跑了5分就40分(当时这题的最高分啊。。。)

    然后我怀疑了一下为什么大家都不写40-70的分。。

    刷新了一下就发现有了个60

    于是先开始写60

    写完发现他说没有4操作 我可写了50行线段树维护这个傻逼操作呢。。

    然后过了样例 交了 wa

    把线段树改成数组。。再交还是wa

    看来不是这里

    于是写了个对拍 拍的不是一般的顺利啊。。。

    看来应该是越界或者爆int了 果不其然造了个大的就wa了

    然后我又懒得改搜索替换了一下int-->ll 就拍上了 提交 60了

    然后就3:30了。。不想写那10分了

    发现有3个人还是几个已经过了最后一题然后还有50分的人。。

    应该不难。。就去看最后一题了

    t4:

    对于第一个问题 是个裸的线段树啊。。

    瞬间感觉我会这题了。。

    然后它要字典序嘛 肯定是前面的影响大

    然后发现我们只要求出以每个开始的方案数就可以了

    因为左边的贡献大,所以我们算的时候要从右边倒着算

    写到一半发现这怎么范围1e9啊。。

    算了一下动态开点线段树

    空间有点gg

    于是只能离散化了(当然这个还会快很多)

    离散化嘛由于我从来不用unique和lower_bound

    于是手写两个二分查找最小满足和最大满足

    然后大概4点多一点就写完了吧。。(大概只写了20-30分钟还挺快的??)

    测了一下样例我记得好像没输出方案 发现g处理的有点问题 改了

    就过了样例

    交 wa

    手造样例 发现有个地方应该写成dy[x]我直接写了x 交 wa

    手造样例 发现这个东西得先判再变成dy 还是wa

    手造样例 发现这个东西他应该叫pos[x]。。。。

    然后我就在一个地方wa了3次

    然后就60了。。

    后面3个点wa

    比较直觉的把int改ll

    交了一下70了。。

    多过一个点什么操作啊。。

    然后我发现方案数可能炸ll啊。。

    写太快没注意这事情。。

    于是我min了一下1e14

    然后就90了

    然后考试结束之前就都90了。。。 

    #updata 要到数据了。。

    结果数据错了。。 数据的l,r炸了int 然后出题人和ac的选手都用int交的??

    怎么本场比赛的两个错都被我碰到了。。

  • 相关阅读:
    vue 把后端返回的图片和url链接生成的二维码用canvas 合成一张图片
    Dart和JavaScript对比小结
    webgl学习,知识储备
    nightwatch+selenium做e2e自动化测试采坑小计
    linux centos7 环境变量设置
    ES6学习笔记
    SQLserver数据库还原语句
    AngularJs的那些坑(持续更新...)
    Hosting socket.io WebSocket apps in IIS using iisnode
    mongodb 数据库操作--备份 还原 导出 导入
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9911578.html
Copyright © 2020-2023  润新知