Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class Main {
- static int solve(ArrayList<Character> a) {
- ArrayList<Integer> b = new ArrayList<Integer>();
- for (int i = 0; i < a.size(); ++i)
- b.add(i);
- ArrayList<Integer> nb = new ArrayList<Integer>();
- while (b.size() > 1) {
- nb = new ArrayList<Integer>();
- for (int i = 0; i < b.size(); i += 2) {
- char c1 = a.get(b.get(i));
- char c2 = a.get(b.get(i+1));
- if ((c1 == c2) || ((c1 == 'P') && (c2 == 'R')) || ((c1 == 'R') && (c2 == 'S')) || ((c1 == 'S') && (c2 == 'P'))) {
- nb.add(b.get(i));
- } else {
- nb.add(b.get(i+1));
- }
- }
- b = nb;
- }
- return b.get(0);
- }
- public static void main(String[] args) {
- long my_id = message.MyNodeId();
- long n = rps.GetN();
- int MASTER = 64;
- int p = 1;
- for (int i = 0; i < n; ++i)
- p += p;
- MASTER = Math.min(MASTER, p);
- if (my_id < MASTER) {
- long use = p / MASTER;
- long start = use*my_id;
- long finish = start + use;
- ArrayList<Character> a = new ArrayList<Character>();
- ArrayList<Integer> b = new ArrayList<Integer>();
- for (int i = (int)start; i < finish; ++i) {
- a.add(rps.GetFavoriteMove(i));
- b.add(i);
- }
- int res = solve(a);
- message.PutChar(MASTER,a.get(res));
- message.PutInt(MASTER, b.get(res));
- message.Send(MASTER);
- }
- if (my_id == MASTER) {
- ArrayList<Character> a = new ArrayList<Character>();
- ArrayList<Integer> b = new ArrayList<Integer>();
- for (int i = 0; i < MASTER; ++i) {
- a.add('a');
- b.add(0);
- }
- int cnt = 0;
- while (cnt < MASTER) {
- int node = message.Receive(-1);
- cnt++;
- char t1 = message.GetChar(node);
- int t2 = message.GetInt(node);
- a.set(node, t1);
- b.set(node,t2);
- }
- int res = solve(a);
- System.out.println(b.get(res));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement