PERIODNB - PERIOD
Tác giả: skyvn97
Ngôn ngữ: C++
#include<algorithm>
#include<cstdio>
#include<iostream>
#define MAX 5000500
#define FOR(i,a,b) for (int i=(a);i<=(b);i=i+1)
#define FORD(i,b,a) for (int i=(b);i>=(a);i=i-1)
using namespace std;
typedef long long ll;
ll a[MAX];
ll maxleft[MAX];
ll maxright[MAX];
int n;
ll d;
void init(void) {
ll p,m,q;
cin >> n;
cin >> d;
cin >> p >> q >> m;
FOR(i,1,n) a[i]=(p*i)%m+q+d*i;
FOR(i,1,n) maxleft[i]=max(maxleft[i-1],a[i]);
FORD(i,n,1) maxright[i]=max(maxright[i+1],a[i]);
}
void process(void) {
ll res;
ll tmp=0;
FOR(i,1,n) tmp=max(tmp,a[i]);
res=tmp;
FOR(i,1,n-1) {
tmp=max(maxleft[i]+d*(n-i),maxright[i+1]-d*i);
res=min(res,tmp);
}
cout << res;
}
int main(void) {
//freopen("PERIOD.INP","r",stdin);
//freopen("PERIOD.OUT","w",stdout);
init();
process();
return 0;
}