竞赛讨论区 > 【题解】wannafly挑战赛15
头像
牛客网小运营
编辑于 2018-12-27 14:48
+ 关注

【题解】wannafly挑战赛15

(题解由比赛出题人提供,点击右侧“本文相关内容”的题目即可开始做题)

T1 最小化价格
首先,可以很明显的这道题可以贪心,对于每一个地点,尽量选择人数更多的小组。
先将地点按照容量从大到小排序,小组按照人数从大到小排序,对于每一个小组维护可选择地点。
每次小组选择价值最小的地点,可以证明这是最优解,且若无法解决则无解。
pq维护可选择的价值即可。

T2 车辆安排
这题看起来是一个分类讨论题,实际上标算也是用分类讨论写的,当然听说许多人露了细节,从5个人开始考虑,5个人就直接上车,4个人可以和1个人的搭配,2个人可以和三个1个人搭配。
想清楚这个就应该不会写错了。

T3 出队
经典约瑟夫问题,lel8的数据范围,可以发现只有1 2报数的时候每次会少一半的人,那么以一轮为计数可以发现更多进行log轮次。
考虑如何维护每一轮的结果,手算几组数据可以发现实际上留下的数在同余意义下是有关系的,这个可以自己推一下,那么每次维护这个信息就可以了。
当然也可以使用二进制解决这个问题,又短又块还没有细节问题

T4 数字串
相当于求间隔距离在[l, r]之间的逆序对数。 因为所有数在[0,9]之间,所以可用 10 个树状数组维护数字每种的前缀和。 初始化求第一遍 ans 的时候,对于每个数考虑前面与该点的距离在[l,r]之间
的所有点。 每次修改,考虑前面和后面与该点的距离在[l,r]之间的所有点,更新 ans 即可。
时间复杂度:n*logn

T5 小W的斜率
虽然题目描述的是斜率最接近,但实际上和求角度最接近没有太大的差别。
只不过两边最接近比较不太一样。
所以可以不妨先旋转坐标系或者说把点按照 y-kx 排序,把问题转化为斜率绝
对值最大的两个点,因为保证了不存在斜率等于所求值,所以不存在斜率是无穷
的情况。现在证明 X 相邻的两个点一定存在斜率最大。设点 A,B 是所求最接近斜 率,且 A,B 不相邻,其中间存在 C,AB 斜率可表示为(Ay-By)/(Ax-Bx)=((Ay-Cy)+(Cy- By))/((Ax-Cx)+(Cx-Bx))所以在(Ay-Cy)/(Ax-Cx)和(Cy-By)/(Cx-Bx)两项中必然存在 一项大于等于 AB 斜率,即答案必存在于相邻的两点中。
枚举相邻两点的斜率,比较得到答案。

T6 下棋
分两部分:
1)求出图每个结点的 SG 值;
2)求每个棋子的 SG 值。
1)图的结点 i 的 SG 值为 sg(i) = mex{sg(j) | i->j},由于图中只有 m 条边不存 在,做到结点 i 时,用一个数组记录 1 到 i-1 的各 SG 值出现了几次,由于 1 到
i-1 的 SG 值一定连续占有一段区间[0,max],对于被删掉的边,让对应的 SG 值的 数量减 1,最小的没出现过的 SG 值肯定在被减的那些 SG 值当中,或者是 max+1。 时间复杂度 O(m)。
2)棋子的 SG 值为 sg(棋 i) = mex{sg(j) | j=l..r},即经典的区间求 mex。建一 个可持久化线段树,第 i 棵线段树记录结点[1,i]中每一个 SG 值出现的最大的下 标,查询[l,r]即在第 r 棵线段树中查询的最小的 x,使得 SG 值为 x 的下标中没有 出现大于等于 l 的值。
最后根据 SG 定理,如果 sg(棋 1)^sg(棋 2)^…^sg(棋 k) = 0 则 Bob 赢,否则 Alice 赢。

其他疑问可加以下交流群(加入一个即可啦~)
牛客多校算法训练营1:453799454
牛客全国算法训练营2:330766563
牛客多校算法训练营3:934889305

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐