题解:
好像很久没写过题解了。。。
比赛太多就不是很想写。。。。
我重新看了几道牛客网以前比赛的题目 当然并没有写代码。。
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交的??
怎么本场比赛的两个错都被我碰到了。。