Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // binaryFounde-1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #include <iostream>
- using namespace std;
- int K, N;
- int* a;
- int* splitters;
- int getError()
- {
- int maxTomSize = -1;
- int* toms = new int[K];
- for (int i = 0; i < K; i++)
- {
- toms[i] = 0;
- for (int j = splitters[i]; j < splitters[i + 1]; j++)
- {
- toms[i] += a[j];
- }
- if (toms[i] > maxTomSize)
- {
- maxTomSize = toms[i];
- }
- }
- return maxTomSize;
- }
- #define max(a,b) (a > b ? a : b)
- bool update()
- {
- bool changed = true;
- for (int i = 1; i < K; i++)
- {
- int error0 = getError();
- splitters[i] += 1;
- int error1 = getError() - error0;
- splitters[i] -= 2;
- int error2 = getError() - error0;
- splitters[i] += 1;
- if (error1 >= 0 && error2 >= 0) continue;
- changed = false;
- if (error1 > error2) splitters[i] -= 1;
- else splitters[i] += 1;
- }
- return changed;
- }
- int main()
- {
- cin >> N;
- a = new int[N];
- for (int i = 0; i < N; i++) cin >> a[i];
- cin >> K;
- splitters = new int[K + 1];
- splitters[0] = 0;
- for (int i = 1; i < K; i++) splitters[i] = int(float(N / (K - 1)) * (float(i) - 0.5));
- splitters[K] = N;
- while (!update()) {};
- cout << getError() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement