답안 #251919

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
251919 2020-07-23T06:12:15 Z kartel Poklon (COCI17_poklon7) C++14
66 / 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] == '1' && b[i] == '1') 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 40 ms 78584 KB Output is correct
3 Correct 40 ms 78584 KB Output is correct
4 Correct 39 ms 78584 KB Output is correct
5 Correct 41 ms 78584 KB Output is correct
6 Correct 41 ms 78584 KB Output is correct
7 Correct 40 ms 78712 KB Output is correct
8 Incorrect 39 ms 78712 KB Output isn't correct
9 Incorrect 40 ms 78712 KB Output isn't correct
10 Incorrect 40 ms 78712 KB Output isn't correct
11 Correct 54 ms 80376 KB Output is correct
12 Correct 55 ms 80248 KB Output is correct
13 Correct 127 ms 88056 KB Output is correct
14 Correct 303 ms 98064 KB Output is correct
15 Incorrect 142 ms 84984 KB Output isn't correct
16 Execution timed out 1091 ms 131448 KB Time limit exceeded
17 Execution timed out 1091 ms 190560 KB Time limit exceeded
18 Execution timed out 1093 ms 201976 KB Time limit exceeded
19 Execution timed out 1092 ms 184184 KB Time limit exceeded
20 Runtime error 892 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)