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

【题解】:中南大学第十二届大学生程序设计竞赛

时间:2018-04-22 20:09:46      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:nbsp   前缀   设计   移动   运算   二次   代码   优化   输入   

ps:感觉比昨天晚上的华师题目质量高一点,至少emmm,题面没有那么多bug。

下面忽略了水题,只给出我觉得有价值的几个题目的题解和代码:

 

【C:神山神石】:

题意:

           每一天,Wells可以喂神山一个神石,使得神山的高度变为原高度乘上神石的能力值,或者使得所有的神石能力值+1。第 0 天时,所有神石的能力值为 0,神山的高度为 1。Wells想知道神山最快的长成刚好某一个高度值最少需要多少天。输入L,R,P(L,R<1e9; P<=100);求多少个x满足L<=x<=R,最小天数小于P。

思路:

           注意是刚好长到x的最小天数,不能超过x。通过暴力搜索,我们发现能够再100天内长到的高度并不多,所以我们应该想办法找到可以长到的高度,然后判断是否在[L,R]区间里(然而我比赛的时候只能求出20天以内长到的高度)。

 

 

【D:I‘m new here】

题意:

            给定一棵树(N<1e5),树边上有边权,现在求任意点对的路径异或值的和。

思路:

            因为两点之间的异或Xor(u,v)=Xor(root,u)^Xor(root,v)。所以我们DFS得到每个点到根的异或值Xi。然后计算两两异或值。因为异或没有结合性,所以不能用前缀和来计算。正确的打开方式是对每一位sig,我们计算1的个数(cnt)和0的个数(N-cnt),那么这一位的贡献就是cnt*(N-cnt)*(1<<sig)。然后累计即可。(但是比赛的时候打死也没有找到bug。。。真让人脑壳大)

 

【E:EZ‘s binoculars】

题意:

             给你一些点(N<1e5),然后其实是每次询问给你一个中心在( x , y )的四边相等的菱形,对角线长为d,求问多少点在菱形里。

官方题解:

             首先可以想到二维树状数组维护。但是显然内存不允许,时间复杂度也不允许。 所以需要离线优化 那么考虑优化,可以基于离线排序后优化。现将所有的点P按照( x + y )关键字排序,然后将菱形的四个点按照( x + y )排序。 那么,每次如果P的(x+y)<= 菱形的(x+y),那么将p的(y-x)离散化后的值插入到树状数组 那么查询菱形中一点 t 下方有多少个点时,就是查询小于等于t.y - t.x的点的个数,树状数组查询即可(必须离散化后查询)。 所以时间复杂度就是O(nlgn)。

 

【J:Pigs can‘t take a sudden turn】

题意:

       两个点以两个恒定的速度移动,问过程中两点的最短距离。

思路:

       可以三分;可以用二次函数不等式(特判相遇的情况); 也可以:

      用相对运算,假设一个点不动,则另一个点的相对运动轨迹就是一条线段,然后求点到线段最短距离。

 

【题解】:中南大学第十二届大学生程序设计竞赛

标签:nbsp   前缀   设计   移动   运算   二次   代码   优化   输入   

原文地址:https://www.cnblogs.com/hua-dong/p/8908690.html

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