STOI补番队胡策

Posted HEHE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STOI补番队胡策相关的知识,希望对你有一定的参考价值。

#1

第一轮是我出的。

比赛情况:

#1 NanoApe 300 (完美AK)

#2 && #3 swm_sxt / ccz  200

 

A.candy

这道题就是个nim游戏, 我们知道当且仅当选出的各堆糖果的异或和为0时,先手必败.

这样问题转化为从N个数中选1一些数使得他们的异或和为0的方案数.

30%,O(2^N) DFS.

假如只有询问, 那么可以直接用类似01背包的dp解决.

for i = 1 ~ 1024

  dp(i, x) += dp(i-1, x^w_i);

dp(i, x)表示考虑了前i个糖果, 异或和为x的方案数. 时间复杂度O(1024*N)

加入操作, 直接再来1次O(1024)的dp即可.

删除操作, 暴力做的话会TLE, 但是只能暴力.

暴力做就可以拿60%.

注意到加入操作不超过10, 我们可以时光倒流, 这样加入操作变成了删除操作, 删除操作变成了假如操作, 删除时暴力重新dp就不会TLE了。

 

B.233

暴力, 期望得分0~60, 给出了详细的数据范围,就是想看你们的乱搞能力.

100%,莫队算法.

首先, 拆去绝对值, 用数据结构(树状数组/线段树/平衡树/暴力)维护, 那么我们可以O(log N)的时间来从[L, R]的答案算出[L-1, R]或者[L+1, R]或者[L, R-1]或者[L, R+1]的答案

假如我们当前知道了[L, R]的答案, 然后想得到[L‘, R‘]的答案, 那么代价就是O((|L-L‘|+|R-R‘|) log N)

离线, 令m=N^0.5, 将询问[l, r]按 l / m为第一关键字, r为第二关键字排序.

然后按这样的的顺序去计算, 每次都是暴力移动, 时间复杂度O(N^1.5 log N)

 

C.D

高斯消元求出f数组. f(u) = sigma(f(v)+w(u,v)) / degree(u), degree(u)为结点u的出度.

跑1遍tarjan, 就变成了DAG, 然后DAG求最长链就是经典问题了...dp就可线性求解.

以上是关于STOI补番队胡策的主要内容,如果未能解决你的问题,请参考以下文章

补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)

CXMS 胡策2

胡策篇题解

胡策篇题目

校内胡策(唯一一个想出来的)

校内胡策 agar - BFS