[解题报告]Ural 1010 Discrete Function

来源:互联网 发布:淘宝运营推广公司 编辑:程序博客网 时间:2024/05/16 19:40

 

    原题地址:http://acm.timus.ru/problem.aspx?space=1&num=1010

       题目大意,定义在{1,2,3,4.....N}上的离散函数,N<=100000,函数值为long int型,找出两点,满足两点之间所有点都在两点连线之下,找出这样的两点,使斜率最大.


       看完题目,很自然的想到对每两个点之间连线的情况进行枚举,这样的时间复杂度为O(n平方).

       <<算法艺术与信息学竞赛>>一书上的思考题是怎样使该题的时间复杂度达到O(n).这就要改进一下枚举的方法了.先假设有3个点x1,x2,x3,其中x1,x3是符合条件的两点,x2在x1,x3连线之下.很显然x2,x3也满足条件并且x2,x3是优于x1,x3的解.所以原题其实只要枚举相邻点之间的斜率就可以了,时间复杂度降到O(n)


     一开始WA,上网搜了一下别人的代码,发现AC代码比较的是两点差的绝对值.例如,对于2,3,1三点,2,3两点斜率为1,而3,1两点斜率为-2,按照我的理解应该是输出1 2,但是因为AC代码比较的是斜率的绝对值,所以输出的是2 3.后来想了想应该是对inclination这个词理解的错误,但不是翻译成斜率或者倾斜角又应该翻译成什么呢...?难道是夹角?...不解,上代码吧..

 

 

 

原创粉丝点击