URAL 1010 Discrete Function

来源:互联网 发布:科研数据分析 书 编辑:程序博客网 时间:2024/05/16 11:17

题目大意:

        现有一个离散函数定义在整数1, 2, 3, ...., N上(2 ≤ N ≤ 100,000),函数值范围为__int64,现求这样两个点的横坐标,这两个点之间的点都低于两点连线,并且这两个点之间的倾斜度最大,就只有一个测例,给定N以及各点的函数值。

题目链接

注释代码:

/*            * Problem ID : URAL 1517 Freedom of Choice   * Author     : Lirx.t.Una            * Language   : Visual C++ 2010       * Run Time   : 0.046            * Run Memory : 920 KB           */ #include <stdio.h>#include <math.h>//最大的离散点数#defineMAXN100001typedeflong longllg;//function,保存函数值,按照题目要求是从下标1开始的llgf[MAXN];intmain() {intn;//点数intp;//position,最终答案点的横坐标(第二个点)inti;doublek;//两点之间的斜率(这里要求是倾斜度),因此取绝对值,斜率值可能超出__int64的范围doublemk;//maximum k,记录当前最大的倾斜度doubletmp;scanf("%d", &n);for ( i = 1; i <= n; i++ )scanf("%lld", f + i);//可以证明,最大倾斜度一定出现在相邻两点//反证法:如果最大倾斜度的两点之间隔着一个点,//即如果k13 > k12和k23的话则中间的点2一定高于13两点之间的连线了,所以这里逐个枚举相邻两点for ( mk = -0.1, i = 2; i <= n; i++ ) {k = (double)f[i] - (double)f[i - 1];if ( ( tmp = fabs(k) ) > mk ) {mk = tmp;p  = i;}}printf("%d %d\n", p - 1, p);return 0;}

无注释代码:

#include <stdio.h>#include <math.h>#defineMAXN100001typedeflong longllg;llgf[MAXN];intmain() {intn;intp;inti;doublek;doublemk;doubletmp;scanf("%d", &n);for ( i = 1; i <= n; i++ )scanf("%lld", f + i);for ( mk = -0.1, i = 2; i <= n; i++ ) {k = (double)f[i] - (double)f[i - 1];if ( ( tmp = fabs(k) ) > mk ) {mk = tmp;p  = i;}}printf("%d %d\n", p - 1, p);return 0;}

单词解释:

dicrete:adj, 离散的

argument:n, 参数

inclination:n, 斜率,斜坡

abscissa:n, 横坐标

ambiguity:n, 含糊,不明确

0 0
原创粉丝点击