比赛

题解:

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

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

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

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交的??

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

posted @ 2018-11-05 21:10  尹吴潇  阅读(318)  评论(0编辑  收藏  举报