답안 #251921

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
251921 2020-07-23T06:19:55 Z kartel Poklon (COCI17_poklon7) C++14
90 / 120
1000 ms 262148 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,nso-stack-protector,unroll-loops,fast-math,-O3")
//#define F first
//#define S second
#define pb push_back
#define N +1000500
#define M ll(1e9 + 7)
#define sz(x) (int)x.size()
#define re return
#define oo ll(1e9)
#define el '\n'
#define Max_A int(1e9)
//#define el endl
#define pii pair <int, int>
#define err ld(1e-9)
#define Max_S int(3e6)
#define last(x) x.back()
#define all(x) (x).begin(), (x).end()
#define arr_all(x, n) (x + 1), (x + 1 + n)
using namespace std;
//using namespace __gnu_pbds;
//typedef tree <int, null_type, less_equal <int> , rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef long long ll;
typedef long double ld;

struct str{
    string l, r;
    ll le, ri;
};

str f[N];
ll i, n, ans;

string umax(string a, string b)
{
    if (sz(a) > sz(b)) return a;
    if (sz(a) < sz(b)) return b;

    int i = 0;
    while (i < sz(a) && a[i] == b[i]) i++;

    if (i == sz(a)) return a;

    if (a[i] > b[i]) return a;
                else return b;
}

string upd(string x, int type)
{
    if (type)
         x += "0";
    else x.erase(sz(x) - 1);

    return x;
}

string rec(ll v)
{
    string lF = f[v].l;
    string rF = f[v].r;

    if (f[v].le != 0) lF = rec(f[v].le);
    if (f[v].ri != 0) rF = rec(f[v].ri);

    return upd(umax(lF, rF), 1);
}

string bin(ll x)
{
    string ans = "";
    while (x)
    {
        if (x & 1)
            ans += "1";
        else ans += "0";
        //ans += char('0' + x & 1);
        x >>= 1;
    }
    reverse(all(ans));
    return ans;
}

int main()
{
    cout.precision(2);
    srand(time(0));
    ios_base::sync_with_stdio(0);
    iostream::sync_with_stdio(0);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

//    in("input.txt");
//    out("output.txt");
    cin >> n;
    for (i = 1; i <= n; i++)
    {
        ll l, r;
        cin >> l >> r;
        if (l > 0) f[i].le = l; else f[i].l = bin(-l);
        if (r > 0) f[i].ri = r; else f[i].r = bin(-r);
    }

    cout << upd(rec(1), 0) << "0";
}
//
//00000
//00110
//00111
//00011
//00000
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 78584 KB Output is correct
2 Correct 41 ms 78712 KB Output is correct
3 Correct 40 ms 78584 KB Output is correct
4 Correct 40 ms 78592 KB Output is correct
5 Correct 48 ms 78592 KB Output is correct
6 Correct 48 ms 78712 KB Output is correct
7 Correct 41 ms 78712 KB Output is correct
8 Correct 40 ms 78716 KB Output is correct
9 Correct 42 ms 78720 KB Output is correct
10 Correct 40 ms 78720 KB Output is correct
11 Correct 53 ms 80376 KB Output is correct
12 Correct 55 ms 80248 KB Output is correct
13 Correct 127 ms 87288 KB Output is correct
14 Correct 285 ms 96504 KB Output is correct
15 Correct 142 ms 83448 KB Output is correct
16 Execution timed out 1102 ms 125688 KB Time limit exceeded
17 Execution timed out 1105 ms 179576 KB Time limit exceeded
18 Execution timed out 1104 ms 190968 KB Time limit exceeded
19 Execution timed out 1103 ms 169528 KB Time limit exceeded
20 Runtime error 896 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)