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;
}

Download