码迷,mamicode.com
首页 > 其他好文 > 详细

STOI补番队胡策

时间:2016-03-05 13:14:54      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

#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补番队胡策

标签:

原文地址:http://www.cnblogs.com/JSZX11556/p/5244541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!