Submission #666835

#TimeUsernameProblemLanguageResultExecution timeMemory
666835ThegeekKnight16Superpozicija (COCI22_superpozicija)C++17
0 / 110
1086 ms424 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
bool temResp = false;
int pos[MAXN][2];
int Marc[2*MAXN];
vector<int> atual;
string s;
vector<int> resp;

void bt(int id, int N)
{
    if (temResp) return;

    if (id == N+1)
    {
        int quant = 0;
        for (int i = 1; i <= 2*N; i++)
        {
            if (Marc[i] == 0) continue;
            if (s[i-1] == '(') quant++;
            else quant--;
            if (quant < 0) return;
        }
        if (quant != 0) return;
        for (auto a : atual) resp.push_back(a);
        temResp = 1;
        return;
    }

    atual.push_back(0);
    Marc[pos[id][0]] = 1;
    bt(id+1, N);
    atual.pop_back();
    Marc[pos[id][0]] = 0;
    atual.push_back(1);
    Marc[pos[id][1]] = 1;
    bt(id+1, N);
    atual.pop_back();
    Marc[pos[id][1]] = 0;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int T;
    cin >> T;
    while (T--)
    {
        int N;
        cin >> N;
        cin >> s;
        for (int i = 1; i <= N; i++)
        {
            cin >> pos[i][0] >> pos[i][1];
        }
        bt(1, N);
        if (!temResp) cout << "-1" << '\n';
        else
        {
            for (auto r : resp) cout << r << " ";
            cout << '\n';
        }
        resp.clear(); atual.clear(); temResp = 0; s.clear();
        for (int i = 1; i <= N; i++) {pos[i][0] = pos[i][1] = 0; Marc[i] = Marc[2*i] = 0;}
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...