题意:
有一个离散函数f(x),x = {1, 2, ,,,,N},f(x)<2^31。现在要找出2个点i,j, 使得函数在这2点之间的点都在这2点连线下方,且此连线的斜率的绝对值越大越好。
题解:因为
函数在这2点之间的点都在这2点连线下方,且此连线的斜率的绝对值越,所以所求间隔必为(minx ,minx+1);
错误分析:题目要求斜率绝对值最大;
#include<cstdio>
#include<cmath>
using namespace std;
int f[100002];
int main()
{
int i,n,k,minx;
while(scanf("%d",&n)!=EOF)
{
scanf("%d%d",&f[1],&f[2]);
k=abs(f[2]-f[1]);
minx=2;
for(i=3;i<=n;i++)
{
scanf("%d",&f[i]);
if(abs(f[i]-f[i-1])>k)//斜率绝对值最大
{
k=abs(f[i]-f[i-1]);
minx=i;
}
}
printf("%d %d\n",minx-1,minx);
}
return 0;
}