#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
#include <time.h>
int main(int argc, char *argv[]){
int npes, myrank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &npes);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
int playing = 1;
int winner = -1;
int coin_value;
int total_value = 0;
while (1){
MPI_Allreduce(&coin_value, &total_value, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
printf("%d and %d and %d\n", myrank
, coin_value
, total_value
);
if (total_value > 0){
if (coin_value == 0){
playing = 0;
break;
}
}else if(total_value == 1){
if (coin_value == 0){
playing = 0;
break;
}else {
// winner
break;
}
}
};
if (playing == 1){
winner = myrank;
MPI_Bcast(&winner, 1, MPI_INT, myrank, MPI_COMM_WORLD);
};
MPI_Barrier(MPI_COMM_WORLD);
printf("Sloužím ti %d, můj vládče, slunce naše jasné\n", winner
);
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSAibXBpLmgiCgojaW5jbHVkZSA8dGltZS5oPgoKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKXsKCiAgICBpbnQgbnBlcywgbXlyYW5rOwoKICAgIE1QSV9Jbml0KCZhcmdjLCAmYXJndik7CgoKCiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmbnBlcyk7CgogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJm15cmFuayk7CgogICAgCgogICAgCgoKCiAgICBpbnQgcGxheWluZyA9IDE7CgogICAgaW50IHdpbm5lciA9IC0xOwoKICAgIGludCBjb2luX3ZhbHVlOwoKICAgIGludCB0b3RhbF92YWx1ZSA9IDA7CgogICAgCgogICAgCgoKCiAgICB3aGlsZSAoMSl7CgogICAgICAgIHNyYW5kKCh1bnNpZ25lZCBpbnQpKHRpbWUoTlVMTCkgKyBteXJhbmspKTsKCiAgICAgICAgY29pbl92YWx1ZSA9IHJhbmQoKSAlIDI7CgogICAgICAgIE1QSV9BbGxyZWR1Y2UoJmNvaW5fdmFsdWUsICZ0b3RhbF92YWx1ZSwgMSwgTVBJX0lOVCwgTVBJX1NVTSwgTVBJX0NPTU1fV09STEQpOwoKICAgICAgICBNUElfQmFycmllcihNUElfQ09NTV9XT1JMRCk7CgogICAgICAgIHByaW50ZigiJWQgYW5kICVkIGFuZCAlZFxuIiwgbXlyYW5rLCBjb2luX3ZhbHVlLCB0b3RhbF92YWx1ZSk7CgogICAgICAgIGlmICh0b3RhbF92YWx1ZSA+IDApewoKICAgICAgICAgICAgaWYgKGNvaW5fdmFsdWUgPT0gMCl7CgogICAgICAgICAgICAgICAgcGxheWluZyA9IDA7CgogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICB9ZWxzZSBpZih0b3RhbF92YWx1ZSA9PSAxKXsKCiAgICAgICAgICAgIGlmIChjb2luX3ZhbHVlID09IDApewoKICAgICAgICAgICAgICAgIHBsYXlpbmcgPSAwOwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgfWVsc2UgewoKICAgICAgICAgICAgICAgIC8vIHdpbm5lcgoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfTsKCiAgICAKCiAgICBpZiAocGxheWluZyA9PSAxKXsKCiAgICAJd2lubmVyID0gbXlyYW5rOwoKICAgIAlNUElfQmNhc3QoJndpbm5lciwgMSwgTVBJX0lOVCwgbXlyYW5rLCBNUElfQ09NTV9XT1JMRCk7CgogICAgfTsKCiAgICAKCiAgICBNUElfQmFycmllcihNUElfQ09NTV9XT1JMRCk7CgogICAgcHJpbnRmKCJTbG91xb7DrW0gdGkgJWQsIG3Fr2ogdmzDoWTEjWUsIHNsdW5jZSBuYcWhZSBqYXNuw6lcbiIsIHdpbm5lcik7CgoKCiAgICBNUElfRmluYWxpemUoKTsKCiAgICByZXR1cm4gMDsKCn0KCg==