Submission #370696

#TimeUsernameProblemLanguageResultExecution timeMemory
370696TosakaUCWPoklon (COCI17_poklon7)C++17
90 / 120
1101 ms180880 KiB
#include <bits/stdc++.h>

using namespace std;

#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("no-stack-protector")
 
const int N = 1e6 + 10;
 
int n;
int L[N], R[N];
 
void convert(vector<char> &res, int x)
{
    for (; x > 0; x /= 2)
        res.push_back(x % 2 ? '1' : '0');
    reverse(res.begin(), res.end());
}
 
vector<char> dfs(int v)
{
    vector<char> a, b;
	if (L[v] < 0) a = dfs(abs(L[v])); else convert(a, L[v]);
    if (R[v] < 0) b = dfs(abs(R[v])); else convert(b, R[v]);
    if (a.size() < b.size())
        swap(a, b);
    if (a.size() ^ b.size())
        return a.push_back('0'), a;
    for (int i = 0; i < int(a.size()); i++)
    {
		if (a[i] == b[i])
			continue;
        if (b[i] == '1')
            swap(a, b);
        break;
    }
    return a.push_back('0'), a;
}
 
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
		int l, r;
		cin >> l >> r;
        if (l < 0) L[i] = abs(l); else L[i] = -l;
        if (r < 0) R[i] = abs(r); else R[i] = -r;
	}
    vector<char> ans = dfs(1);
    for (auto x : ans)
        cout << x;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...