This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#ifndef Nhoksocqt1
    #include "abc.h"
#endif // Nhoksocqt1
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define sz(x) int((x).size())
#define fi first
#define se second
#define names ajfhqwurhuqerw
typedef long long ll;
typedef pair<int, int> ii;
template<class X, class Y>
	inline bool maximize(X &x, const Y &y) {return (x < y ? x = y, 1 : 0);}
template<class X, class Y>
	inline bool minimize(X &x, const Y &y) {return (x > y ? x = y, 1 : 0);}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int Random(int l, int r) {
    return uniform_int_distribution<int>(l, r)(rng);
}
const int MAXN = 702;
const int MAXM = 1003;
map<string, string> Map;
string names[MAXN], letter[MAXM][2];
int ans[MAXN][16], tmp[16], n, m;
int isSend[MAXN][MAXM], isRecei[MAXN][MAXM], ok[MAXN][MAXN];
int alice(const int n, const char str[][5], const unsigned short numbers[], bool outputs_alice[]) {
    Map.clear();
    vector<string> vString;
    for (int i = 0; i < n; ++i) {
        names[i].clear();
        for (int j = 0; j < 5; ++j) {
            if(str[i][j] == '\0')
                break;
            names[i].push_back(str[i][j]);
        }
        vString.push_back(names[i]);
    }
    sort(vString.begin(), vString.end());
    vString.erase(unique(vString.begin(), vString.end()), vString.end());
    int cnt(0);
    for (int it = 0; it < sz(vString); ++it) {
        string str(vString[it]);
        if(Map.find(str) == Map.end()) {
            string tmp;
            if(cnt >= 26) {
                tmp = "a" + char(cnt % 26 + 'a');
            } else {
                tmp = char(cnt + 'a');
            }
            Map[str] = tmp;
            str = tmp;
            ++cnt;
        }
    }
    for (int i = 0; i < n; ++i)
        names[i] = Map[names[i]];
    int lA(0);
    outputs_alice[lA++] = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < sz(names[i]); ++j) {
            int val = names[i][j] - 'a';
            for (int k = 0; k < 16; ++k)
                outputs_alice[lA++] = val >> k & 1;
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int k = 0; k < 16; ++k)
            outputs_alice[lA++] = numbers[i] >> k & 1;
    }
    return lA;
}
int bob(const int m, const char send[][5], const char recei[][5], bool outputs_bob[]) {
    Map.clear();
    vector<string> vString;
    for (int i = 0; i < m; ++i) {
        letter[i][0].clear();
        letter[i][1].clear();
        for (int j = 0; j < 5; ++j) {
            if(send[i][j] == '\0')
                break;
            letter[i][0].push_back(send[i][j]);
        }
        for (int j = 0; j < 5; ++j) {
            if(recei[i][j] == '\0')
                break;
            letter[i][1].push_back(recei[i][j]);
        }
        vString.push_back(letter[i][0]);
        vString.push_back(letter[i][1]);
    }
    sort(vString.begin(), vString.end());
    vString.erase(unique(vString.begin(), vString.end()), vString.end());
    int cnt(0);
    for (int it = 0; it < sz(vString); ++it) {
        string str(vString[it]);
        if(Map.find(str) == Map.end()) {
            string tmp;
            if(cnt >= 26) {
                tmp = "a" + char(cnt % 26 + 'a');
            } else {
                tmp = char(cnt + 'a');
            }
            Map[str] = tmp;
            str = tmp;
            ++cnt;
        }
    }
    for (int i = 0; i < m; ++i) {
        letter[i][0] = Map[letter[i][0]];
        letter[i][1] = Map[letter[i][1]];
    }
    int lB(0);
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < sz(letter[i][0]); ++j) {
            int val = letter[i][0][j] - 'a';
            for (int k = 0; k < 5; ++k)
                outputs_bob[lB++] = val >> k & 1;
        }
        for (int j = 0; j < sz(letter[i][1]); ++j) {
            int val = letter[i][1][j] - 'a';
            for (int k = 0; k < 5; ++k)
                outputs_bob[lB++] = val >> k & 1;
        }
    }
    return lB;
}
#ifdef Nhoksocqt1
bool alice_output[100 * MAXM], bob_output[100 * MAXM], val[20000 * MAXM];
#endif // Nhoksocqt1
int circuit(const int la, const int lb, int ope[], int gate[][2], int outputs_circuit[][16]) {
    int l(la + lb), n = (la - 1) / 16 / 2, m = lb / 2 / 5;
    for (int i = 0; i < n; ++i) {
        for (int k = 0; k < 5; ++k) {
            ope[l] = 5;
            gate[l][0] = gate[l][1] = i * 16 + 1 + k;
            ++l;
        }
    }
    for (int j = 0; j < 16; ++j) {
        ope[l] = 8;
        gate[l][0] = gate[l][1] = 0;
        for (int i = 0; i < n; ++i)
            ans[i][j] = l;
        ++l;
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            int lst(-1);
            for (int k = 0; k < 5; ++k) {
                ope[l] = 6;
                gate[l][0] = la + lb + i * 5 + k, gate[l][1] = la + j * 10 + k;
                ++l;
                if(lst >= 0) {
                    ope[l] = 8;
                    gate[l][0] = lst, gate[l][1] = l - 1;
                    ++l;
                }
                lst = l - 1;
            }
            isSend[i][j] = lst;
            lst = -1;
            for (int k = 0; k < 5; ++k) {
                ope[l] = 6;
                gate[l][0] = la + lb + i * 5 + k, gate[l][1] = la + j * 10 + 5 + k;
                ++l;
                if(lst >= 0) {
                    ope[l] = 8;
                    gate[l][0] = lst, gate[l][1] = l - 1;
                    ++l;
                }
                lst = l - 1;
            }
            isRecei[i][j] = lst;
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            int lst(-1);
            for (int k = 0; k < m; ++k) {
                ope[l] = 8;
                gate[l][0] = isSend[j][k], gate[l][1] = isRecei[i][k];
                ++l;
                if(lst >= 0) {
                    ope[l] = 14;
                    gate[l][0] = lst, gate[l][1] = l - 1;
                    ++l;
                }
                lst = l - 1;
            }
            ok[i][j] = lst;
            for (int k = 0; k < 16; ++k) {
                ope[l] = 8;
                gate[l][0] = ok[i][j], gate[l][1] = (n + j) * 16 + 1 + k;
                tmp[k] = l;
                ++l;
            }
            for (int j = 0; j < 16; ++j) {
                int newa1[16], newa2[16];
                for (int t = 0; t < 16; ++t) {
                    ope[l] = 6;
                    gate[l][0] = ans[i][t], gate[l][1] = tmp[t];
                    newa1[t] = l;
                    ++l;
                }
                ope[l] = 8;
                gate[l][0] = gate[l][1] = 16;
                newa2[0] = l;
                ++l;
                for (int t = 1; t < 16; ++t) {
                    ope[l] = 8;
                    gate[l][0] = ans[i][t - 1], gate[l][1] = tmp[t - 1];
                    newa2[t] = l;
                    ++l;
                }
                for (int j = 0; j < 16; ++j)
                    ans[i][j] = newa1[j], tmp[j] = newa2[j];
            }
            for (int j = 0; j < 16; ++j) {
                ope[l] = 14;
                gate[l][0] = ans[i][j], gate[l][1] = tmp[j];
                ans[i][j] = l;
                ++l;
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 16; ++j)
            outputs_circuit[i][j] = ans[i][j];
    }
    return l;
}
#ifdef Nhoksocqt1
int ope[100 * MAXM], gate[100 * MAXM][2], circuit_output[MAXN][16];
int main(void) {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    #define TASK "abc"
    if(fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }
    unsigned short numbers[MAXN];
    char names[MAXN][5];
    char send[MAXM][5], reic[MAXM][5];
    int n, m;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        string str;
        cin >> str;
        for (int j = 0; j < sz(str); ++j)
            names[i][j] = str[j];
        names[i][sz(str)] = '\0';
        cin >> numbers[i];
    }
    cin >> m;
    for (int i = 0; i < m; ++i) {
        string sa, sb;
        cin >> sa >> sb;
        for (int j = 0; j < sz(sa); ++j)
            send[i][j] = sa[j];
        for (int j = 0; j < sz(sb); ++j)
            reic[i][j] = sb[j];
        send[i][sz(sa)] = reic[i][sz(sb)] = '\0';
    }
    int la = alice(n, names, numbers, alice_output);
    int lb = bob(m, send, reic, bob_output);
    int l = circuit(la, lb, ope, gate, circuit_output);
    for (int i = 0; i < la; ++i)
        val[i] = alice_output[i];
    for (int i = la; i < la + lb; ++i)
        val[i] = bob_output[i - la];
    cout << "ALICE: " << la << '\n';
    for (int it = 0; it < la; ++it)
        cout << val[it] << ' '; cout << '\n';
    cout << "BOB: " << lb << '\n';
    for (int it = 0; it < lb; ++it)
        cout << val[la + it] << ' '; cout << '\n';
    for (int i = la + lb; i < l; ++i) {
        int x(gate[i][0]), y(gate[i][1]);
        if(ope[i] == 8) {
            val[i] = (val[x] & val[y]);
        } else
            if(ope[i] == 14) {
                val[i] = (val[x] | val[y]);
            } else
                if(ope[i] == 6) {
                    val[i] = (val[x] ^ val[y]);
                } else
                    if(ope[i] == 5) {
                        val[i] = !val[x];
                    } else {
                        abort();
                    }
    }
    for (int i = 0; i < n; ++i) {
        int res(0);
        for (int j = 0; j < 16; ++j)
            res |= val[circuit_output[i][j]] << j;
        cout << res << '\n';
    }
    cout << "OK:\n";
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            cout << val[ok[i][j]] << ' '; cout << '\n';
    }
    return 0;
}
#endif // Nhoksocqt1
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |