40分求调!!!
查看原帖
40分求调!!!
550620
maoding楼主2024/7/22 21:10
#include <iostream>
#define ll long long
using namespace std;

ll a[1000010], score[100010], dp[100010], s[100010];

int main()
{
	ll n, p;
	cin >> n >> p;
	for (ll i = 1; i <= n; i++)
	{
		cin >> a[i];
		s[i] = s[i - 1] + a[i];
	}
//	cout << dp[1].num << " ";
	dp[1] = a[1];
	for (ll i = 2; i <= n; i++)
	{
		dp[i] = max(max(a[1], a[i]), max(s[i], dp[i - 1]));
	}
	for (int i = 2; i <= n; i++)
	{
		if (dp[i] < dp[i - 1])
		{
			cout << dp[1] << endl;
			return 0;
		}
	}
//	for (int i = 1; i <= n; i++)
//	{
//		cout << dp[i] << " ";
//	}
//	cout << endl;
	score[1] = 1ll * dp[1];
	for (ll i = 2; i <= n; i++)
	{
		score[i] = score[i - 1] + dp[i - 1];
	}
//	for (int i = 1; i <= n; i++) cout << score[i] << " ";
//	cout << endl;
	cout << 1ll * max(score[1], score[n]) % p << endl;
	return 0;
}
//		if (dp[i - 1].end == i - 1)
//		{
//			if (dp[i - 1].num > a[i] && dp[i - 1].num > dp[i - 1].num + a[i])
//			{
//				dp[i].num = dp[i - 1].num;
//				dp[i].end = i - 1;
//				continue;
//			}
//			if (dp[i - 1].num + a[i] > a[i] && dp[i - 1].num + a[i] > dp[i - 1].num)
//			{
//				dp[i].num = dp[i - 1].num + a[i];
//				dp[i].end = i;
//				continue;
//				//cout << 2 << endl;
//			}
//			if (a[i] > dp[i - 1].num && a[i] > dp[i - 1].num + a[i]);
//			{
//				dp[i].num = a[i];
//				dp[i].end = i;
//				continue;
//			}
//		}
//		else
//		{
//			if (a[i] > dp[i - 1].num)
//			{
//				dp[i].num = a[i];
//				dp[i].end = i;
//				continue;
//			}
//			else
//			{
//				dp[i].num = dp[i - 1].num;
//				dp[i].end = dp[i - 1].end;
//				continue;
//			}
//		}
//		dp[i] = max(1ll * a[i] % p, dp[i - 1] % p);
//		cout << dp[i].num << " ";
2024/7/22 21:10
加载中...