1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "message.h"
#include "kanapka.h"

#include <algorithm>
#include <iostream>
using namespace std;

const int lInstancji = NumberOfNodes();
const int idInstancji = MyNodeId();
const long long dKanapki = GetN();

int main() {
	long long poczatek = (long long)(idInstancji * dKanapki / lInstancji);
	long long koniec = (long long)((idInstancji+1) * dKanapki / lInstancji);
	long long suma = 0, najmniejszyWSrodku = 0;
	long long najmniejszyKoniec = 0, najmniejszyPoczatek = 0;
	for (long long i = poczatek; i < koniec; ++i) {
		long long smak = GetTaste(i);
		suma += smak;
		najmniejszyKoniec += smak;
		if (najmniejszyKoniec > 0)
			najmniejszyKoniec = 0;
		najmniejszyWSrodku = min(najmniejszyWSrodku, najmniejszyKoniec);
	}
	for (long long i = koniec-1; i>= poczatek; --i) {
		long long smak = GetTaste(i);
		najmniejszyPoczatek += smak;
		if (najmniejszyPoczatek > 0)
			najmniejszyPoczatek = 0;
	}
	PutLL(0, suma);
	PutLL(0, najmniejszyWSrodku);
	PutLL(0, najmniejszyKoniec);
	PutLL(0, najmniejszyPoczatek);
	Send(0);
	
	if (idInstancji == 0){
		long long wSumie = 0, czescKanapki = 0, czescKanapkiPom = 0;
		for (int i = 0; i<lInstancji; i++){
			Receive(i);
			suma = GetLL(i);
			najmniejszyWSrodku = GetLL(i);
			najmniejszyKoniec = GetLL(i);
			najmniejszyPoczatek = GetLL(i);
			czescKanapki = min(czescKanapki, czescKanapkiPom + najmniejszyPoczatek);
			czescKanapkiPom += suma;
			czescKanapkiPom = min(czescKanapkiPom, najmniejszyKoniec);
			czescKanapki = min(czescKanapki, najmniejszyWSrodku);
			wSumie += suma;
		}
		cout << (wSumie - czescKanapki) << endl;
	}
  
  return 0;
}