Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <message.h>
- #include "nanobots.h"
- #include <bits/stdc++.h>
- #define MOD 1000000007LL
- int main() {
- long long N = GetRange();
- long long myId = MyNodeId();
- long long nodes = NumberOfNodes();
- long long MASTER_NODE = 0;
- long long st = (myId * N) / nodes + 1;
- long long en = ((myId + 1) * N) / nodes;
- long long res = 0LL;
- long long L, R, C;
- long long X, X2;
- long long Y;
- X = st - 1;
- Y = N;
- while (1) {
- X++;
- L = 0; R = Y;
- while (R > L) {
- C = (L+R+1)/2;
- if (Experiment(X, C) == 'T') L = C;
- else R = C-1;
- }
- if (L == 0) break;
- Y = L;
- L = X; R = N;
- while (R > L) {
- C = (L+R+1)/2;
- if (Experiment(C, Y) == 'T') L = C;
- else R = C-1;
- }
- X2 = L;
- if (X2 > en) X2 = en;
- res = (res + ((X2 - X + 1LL) % MOD) * (Y % MOD)) % MOD;
- X = X2;
- if (X2 == en) break;
- }
- PutLL(MASTER_NODE, res);
- Send(MASTER_NODE);
- if (myId == MASTER_NODE) {
- long long ans = 0LL;
- for (long long i = 0; i < nodes; i++) {
- Receive(i);
- long long cur = GetLL(i);
- ans = (ans + cur) % MOD;
- }
- printf("%lli\n",ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment