3954 2023. 03. 06 15:20:04 CWM Sípálya (55 pont) cpp17 Hibás válasz 10/55 363ms 12604 KiB
// Nemes2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <unordered_set>
#include <cmath>

using namespace std;
using ll = long long;
vector<int> solution;
void DFS(int a, vector<vector<int>>& graph, int cameFrom) {
	if (graph[a].size() > 2) return;
	for (size_t i = 0; i < graph[a].size(); i++)
	{
		if (graph[a][i] != cameFrom) {
			solution.push_back(graph[a][i]);
			DFS(graph[a][i], graph, a);
		}
	}
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int n, k;
	cin >> n >> k;
	vector<int> heigths;
	vector<ll> heigthsPrefixSum;
	ll cur = 0;
	heigthsPrefixSum.push_back(0);
	for (size_t i = 0; i < n; i++)
	{
		int a;
		cin >> a;
		heigths.push_back(a);
		heigthsPrefixSum.push_back(cur + a);
		cur += a;
	}
	vector<int> highestInTheMargin;
	int max = 0;
	for (size_t i = 0; i < k; i++)
	{
		if (heigths[i] + i > max) {
			max = heigths[i] + i;
		}
	}
	highestInTheMargin.push_back(max);
	for (size_t i = k; i < n; i++)
	{
		if (heigths[i - k] == max-1) {
			// find new max
			int InsMax = 0;
			for (size_t j = 1; j < k+1; j++)
			{
				if (heigths[i-k+j] + j > InsMax) {
					InsMax = heigths[i-k+j] + j;
				}
			}
			max = InsMax;
		}
		else if (heigths[i] + k > max) {
			max = heigths[i] + k; //possible timesave here
		}
		else max--;
		highestInTheMargin.push_back(max);
	}
	ll leastPetak = LLONG_MAX;
	ll curLeastPetak = 0;
	for (size_t i = 0; i < highestInTheMargin.size(); i++)
	{
		ll HeightSum = heigthsPrefixSum[i + k] - heigthsPrefixSum[i];
		ll HeightNeeded = (2ll * highestInTheMargin[i] - k+1) * k / 2;
		curLeastPetak = HeightNeeded - HeightSum;
		if (curLeastPetak < leastPetak) {
			leastPetak = curLeastPetak;
		}
	}
	cout << leastPetak;
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Részfeladat Összpont Teszt Verdikt Idő Memória
base 10/55
1 Elfogadva 0/0 3ms 1828 KiB
2 Hibás válasz 0/0 2ms 2180 KiB
3 Hibás válasz 0/2 3ms 2432 KiB
4 Hibás válasz 0/2 3ms 2764 KiB
5 Hibás válasz 0/2 3ms 2976 KiB
6 Hibás válasz 0/2 3ms 3184 KiB
7 Elfogadva 3/3 3ms 3148 KiB
8 Hibás válasz 0/1 4ms 3744 KiB
9 Elfogadva 1/1 4ms 3828 KiB
10 Hibás válasz 0/1 4ms 3892 KiB
11 Hibás válasz 0/1 14ms 3948 KiB
12 Hibás válasz 0/1 13ms 3984 KiB
13 Elfogadva 1/1 4ms 4080 KiB
14 Hibás válasz 0/2 4ms 4044 KiB
15 Hibás válasz 0/2 13ms 4292 KiB
16 Hibás válasz 0/2 347ms 11880 KiB
17 Hibás válasz 0/2 28ms 10848 KiB
18 Elfogadva 2/2 28ms 11028 KiB
19 Elfogadva 3/3 28ms 11040 KiB
20 Hibás válasz 0/2 82ms 12364 KiB
21 Hibás válasz 0/2 268ms 12604 KiB
22 Hibás válasz 0/2 286ms 12584 KiB
23 Hibás válasz 0/2 201ms 12548 KiB
24 Hibás válasz 0/2 363ms 12524 KiB
25 Hibás válasz 0/2 97ms 12536 KiB
26 Hibás válasz 0/2 109ms 12536 KiB
27 Hibás válasz 0/2 104ms 12360 KiB
28 Hibás válasz 0/3 59ms 12488 KiB
29 Hibás válasz 0/3 97ms 12356 KiB
30 Hibás válasz 0/3 28ms 12368 KiB