206592026-01-08 13:53:46markfsibianMaximális szorzat (50 pont)cpp17Időlimit túllépés 1/50600ms1976 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int n, k, b, a;
int m = 1000000007;

vector<int> v;

void meg() {
	int res = 1;
	for (auto& e : v)
	{
		res = res * e % m;
	}
	cout << res;
}

void fix() {
	if (n >= 2)
	{
		int i = 1;
		while (k)
		{
			if (v[i - 1] >= 0)
			{
				if (v[i - 1] <= v[i])
				{
					v[i - 1]++;
					k--;
				}
				else if (i < v.size() - 1)
					i++;
				else
					break;
			}
		}
	}
	else
	{
		v[0] = v[0] + k;
		k = 0;
	}
}

int main() {
	cin >> n >> k >> b;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a;
		v.push_back(a);
	}
	sort(v.begin(), v.end());
	if ((v[0] >= 0 && b > 0))
		cout << -1;
	else if (v[0] >= 0)
	{
		while (k)
			fix();
		meg();
	}
	else if (v[0] < 0 && b == 0)
	{
		int i = 1;
		for (auto i = v.rbegin(); i != v.rend(); ++i)
		{
			if (*i < 0)
			{
				k = k + *i;
				*i = 0;
			}
		}
		if (k < 0)
			cout << -1;
		else if (k == 0)
			cout << 0;
		else
		{
			while (k)
				fix();
			meg();
		}
		
	}
	else if (v[0] < 0 && b > 0 && b % 2 == 0)
	{
		int i = 1, db = 0, t = 0;
		for (auto i = v.rbegin(); i != v.rend() && t-db > b; ++i)
		{
			if (*i < 0)
			{
				k = k + *i;
				*i = 0;
				db++;
				if (!t)
					t = distance(v.rend(), i);
			}
		}
		if (k < 0)
			cout << -1;
		else if (k == 0)
			cout << 0;
		else
		{
			while (k)
				fix();
			meg();
		}
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base1/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Időlimit túllépés0/0580ms512 KiB
4Időlimit túllépés0/0580ms316 KiB
5Időlimit túllépés0/0600ms316 KiB
6Hibás válasz0/21ms316 KiB
7Hibás válasz0/21ms316 KiB
8Hibás válasz0/21ms316 KiB
9Hibás válasz0/21ms316 KiB
10Hibás válasz0/24ms316 KiB
11Hibás válasz0/252ms996 KiB
12Hibás válasz0/157ms944 KiB
13Időlimit túllépés0/1583ms316 KiB
14Időlimit túllépés0/1580ms316 KiB
15Időlimit túllépés0/1582ms688 KiB
16Időlimit túllépés0/1600ms688 KiB
17Időlimit túllépés0/1586ms688 KiB
18Elfogadva1/110ms760 KiB
19Időlimit túllépés0/1586ms944 KiB
20Időlimit túllépés0/1600ms996 KiB
21Időlimit túllépés0/1600ms836 KiB
22Időlimit túllépés0/1583ms944 KiB
23Időlimit túllépés0/1580ms944 KiB
24Időlimit túllépés0/1600ms1028 KiB
25Időlimit túllépés0/2598ms316 KiB
26Időlimit túllépés0/2583ms316 KiB
27Időlimit túllépés0/2580ms688 KiB
28Időlimit túllépés0/1600ms752 KiB
29Időlimit túllépés0/2600ms696 KiB
30Időlimit túllépés0/1580ms944 KiB
31Időlimit túllépés0/1586ms952 KiB
32Időlimit túllépés0/2582ms316 KiB
33Időlimit túllépés0/2584ms1976 KiB
34Időlimit túllépés0/1587ms1000 KiB
35Időlimit túllépés0/2583ms944 KiB
36Időlimit túllépés0/2583ms940 KiB
37Időlimit túllépés0/2587ms944 KiB
38Időlimit túllépés0/2584ms944 KiB
39Időlimit túllépés0/1584ms316 KiB