STOI补番队胡策

ROUND 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就可线性求解.

 

ROUND 2

这次是czllgzmzl大爷出的。

第一题是个最小路径覆盖,转化一下,就可以用O(n^2)的dp水过去....这是这场比赛我唯一AC的题目

t2写到一半弃疗了, 打了t2,t3暴力就滚粗了= = 140垫底无误

 

Round 3

这场是child出题

写暴力混了个并列#2...... 70+30+40+30=170 

posted @ 2016-03-05 12:13  JSZX11556  阅读(531)  评论(6编辑  收藏  举报