UVa1709——Amalgamated Artichokes

来源:互联网 发布:php referer 编辑:程序博客网 时间:2024/06/08 14:01

这道题,是 ACM-ICPC World Finals Marrakech的比赛题中的第一题,题目挺简单的,给了你公式。题目要我们求解的是数组中的最大差值,也就是   Max{a[i] - a[j]}其中(i < j)。

用暴力的方法也是超时,尽管时间限制是5S,所以需要用线性时间的算法。

下面的是AC的代码:

#include <iostream>#include <cmath>#include <cstdio>using namespace std;const int MAXN = 1000005;int p, a, b, c, d, n;double price[MAXN];int main(){int i, j;while(scanf("%d%d%d%d%d%d", &p, &a, &b, &c, &d, &n) != EOF){for(i = 1; i <= n; i++)   //按照公式计算price[i] = p * (sin(a * i + b) + cos(c * i + d) + 2);if(n >= 2)    //n>2的情况{double Max = price[1] - price[2], temp = price[1];for(i = 3; i <= n; i++){if(price[i - 1] > temp)   //找到数组中相对大的数,这里的相对就是要差值最大,而不一定要找到数组中最大的temp = price[i - 1];if(temp - price[i] > Max)  //找差值最大的Max = temp - price[i];}if(Max >= 0)printf("%lf\n", Max);else    //小于0,也就是数组递增的,输出0{Max = 0.0;printf("%lf\n", Max);}}else  //n = 1特殊处理{double Max = 0.0;printf("%lf\n", Max);}}return 0;}


0 0
原创粉丝点击