Guest User

Untitled

a guest
Jun 11th, 2017
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <message.h>
  2. #include "nanobots.h"
  3. #include <bits/stdc++.h>
  4. #define MOD 1000000007LL
  5.  
  6. int main() {
  7.   long long N = GetRange();
  8.   long long myId = MyNodeId();
  9.  
  10.   long long nodes = NumberOfNodes();
  11.   long long MASTER_NODE = 0;
  12.  
  13.   long long st = (myId * N) / nodes + 1;
  14.   long long en = ((myId + 1) * N) / nodes;
  15.  
  16.   long long res = 0LL;
  17.   long long L, R, C;
  18.   long long X, X2;
  19.   long long Y;
  20.  
  21.   X = st - 1;
  22.   Y = N;
  23.   while (1) {
  24.     X++;
  25.     L = 0; R = Y;
  26.     while (R > L) {
  27.       C = (L+R+1)/2;
  28.       if (Experiment(X, C) == 'T') L = C;
  29.       else R = C-1;
  30.     }
  31.     if (L == 0) break;
  32.     Y = L;
  33.     L = X; R = N;
  34.     while (R > L) {
  35.       C = (L+R+1)/2;
  36.       if (Experiment(C, Y) == 'T') L = C;
  37.       else R = C-1;
  38.     }
  39.     X2 = L;
  40.     if (X2 > en) X2 = en;
  41.     res = (res + ((X2 - X + 1LL) % MOD) * (Y % MOD)) % MOD;
  42.     X = X2;
  43.     if (X2 == en) break;
  44.   }
  45.  
  46.   PutLL(MASTER_NODE, res);
  47.   Send(MASTER_NODE);
  48.  
  49.   if (myId == MASTER_NODE) {
  50.     long long ans = 0LL;
  51.     for (long long i = 0; i < nodes; i++) {
  52.       Receive(i);
  53.       long long cur = GetLL(i);
  54.       ans = (ans + cur) % MOD;
  55.     }
  56.     printf("%lli\n",ans);
  57.   }
  58.  
  59.   return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment