Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
  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
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#define _CRT_SECURE_NO_WARNINGS
#include "maklib.h"
#include "message.h"

#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>

typedef long long lLong;
typedef unsigned long uLong;
typedef unsigned long long ulLong;
typedef unsigned int uInt;
typedef unsigned char Byte;

using namespace std;

#define FOR(x, b, e) for(int x=b; x<=(e); ++x)
#define ALL(i) (i).begin(), (i).end()
#define CONTAINS(i,v) (find(ALL(i),v)!=(i).end())
typedef vector<bool> bit_vector;
typedef vector<ulLong> VI;
typedef vector<ulLong> VLL;


//Implementacja algorytmu Kadane'a - �r�d�o - Wikipedia z drobnymi modyfikacjami
inline lLong MaxSuma(uLong startPos, uLong borderPos, uLong elementCnt)
{
        // Initialize variables here
        int max_so_far  = ElementAt(startPos);
		int max_ending_here = ElementAt(startPos);
 
        // OPTIONAL: These variables can be added in to track the position of the subarray
        // size_t begin = 0;
        // size_t begin_temp = 0;
        // size_t end = 0;
 
        // Find sequence by looping through
        for(lLong i = startPos+1; i <= elementCnt; i++)
        {
                // calculate max_ending_here
                if(max_ending_here < 0)
                {
                        max_ending_here = ElementAt(i);
 
                        // begin_temp = i;
                }
                else
                {
                        max_ending_here += ElementAt(i);
                }
 
                // calculate max_so_far
                if(max_ending_here >= max_so_far )
                {
                        max_so_far  = max_ending_here;
 
                        // begin = begin_temp;
                        // end = i;
						if(i>borderPos)
						{
							break;
						}
                }
        }
        return max_so_far ;
}




int main(int argc, char **argv)
{		
	lLong N = Size();

	int myId=MyNodeId();
	int numOfNodes = NumberOfNodes();

	lLong poczatek = ((MyNodeId() * N) / NumberOfNodes()) + 1;
	lLong koniec = (((MyNodeId() + 1) * N) / NumberOfNodes()) + 1;
	
	// Znajdz max podtablice w przydzileonym bloku
	lLong suma=MaxSuma(poczatek,koniec,N);
	
	// moduly rozproszone zwracaja swoje wyniki do bazy
	if(myId>0)
	{
		PutLL(0,suma);
		Send(0);
	}
	else
	{		
		// modul glowny wybiera max sume z wynikow
		for(lLong i=1;i<numOfNodes;i++)
		{
			int instancja = Receive(-1);
			lLong sumaInst = GetLL(instancja);
			suma = max(suma,sumaInst);
		}
		printf("%lld\n",suma);
	}	
	return 0;
}