A.Amalgamated Artichokes
题目链接
https://icpc.kattis.com/problems/artichoke
题目大意
定义数列
price
,其中
price(k)=p⋅(sin(a⋅k+b)+cos(c⋅k+d)+2)
求 price(i)−price(j)(i<j) 的最大值,若最大值小于0,输出0
思路
直接暴力求出每一项的值,对于 price(i) 而言,用 [1,i−1] 中的最大值减去 price(i) 来更新答案即可。前缀的最大值需要时刻更新维护。
代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <cmath>
#define MAXN 1100000
using namespace std;
int n;
double p,a,b,c,d;
double maxf=-1e20,minf=1e20;
double ans=-1e20;
int main()
{
scanf("%lf%lf%lf%lf%lf%d",&p,&a,&b,&c,&d,&n);
for(int i=1;i<=n;i++)
{
double f=p*(sin(a*i+b)+cos(c*i+d)+2);
if(i>1) ans=max(ans,maxf-f);
maxf=max(maxf,f);
minf=min(minf,f);
}
if(ans<1e-6) printf("0\n");
else printf("%lf\n",ans);
return 0;
}