Submission #427397

# Submission time Handle Problem Language Result Execution time Memory
427397 2021-06-14T14:52:26 Z tqbfjotld City (JOI17_city) C++14
50 / 100
1109 ms 59764 KB
#include "Encoder.h"
#include <bits/stdc++.h>
using namespace std;

int lch[500005];
int rch[500005];
int curnodes,n;
vector<int> adjl[250005];
double const1 = 0.0;
double const2 = 1.0;
const int cutoffval = 10;
const int cutoff2 = 3;

double func(int node, int pa){
    set<pair<double,int> > stuff;
    for (auto x : adjl[node]){
        if (x==pa) continue;
        double res = func(x,node);
        stuff.insert({res,x});
    }
    while (stuff.size()>2){
        auto i1 = *stuff.begin();
        stuff.erase(stuff.begin());
        pair<double,int> thing = {-999.0,-1};
        auto it = stuff.lower_bound({i1.first+const1,-1});
        if (it!=stuff.end()){
            thing = (*it);
        }
        if (it!=stuff.begin()){
             it--;
             if (abs(thing.first-(i1.first+const1))>=abs((*it).first-(i1.first+const1))){
                thing = *it;
             }
        }
        auto i2 = thing;
        stuff.erase(stuff.lower_bound(thing));
        int nw = curnodes++;
        lch[nw] = i2.second;
        rch[nw] = i1.second;
        stuff.insert({max(i2.first+const2,i1.first+const1+const2),nw});
    }
    if (stuff.size()==2){
        auto i1 = *stuff.begin();
        stuff.erase(stuff.begin());
        auto i2 = *stuff.begin();
        stuff.erase(stuff.begin());
        lch[node] = i2.second;
        rch[node] = i1.second;
        return max(i2.first+const2,i1.first+const1+const2);
    }
    if (stuff.size()==1){
        auto i1 = *stuff.begin();
        lch[node] = i1.second;
        return i1.first+const2;
    }
    return 0.0;
}

void dfs2(int node, long long curamt, int pos, int h){
    //printf("ch of %d = %d %d\n",node,lch[node],rch[node]);
    //printf("pos = %d\n",pos);
    if (node<n){
       // printf("code %d %lld\n",node,curamt+(1LL<<pos));
        Code(node,curamt+(1LL<<pos));
    }

    if (h>=cutoffval|| h<=cutoff2){
        if (lch[node]!=-1){
            dfs2(lch[node],curamt,pos+1,h+1);
        }
        if (rch[node]!=-1){
            dfs2(rch[node],curamt+(1LL<<pos),pos+1,h+1);
        }
    return;
    }

    if (lch[node]!=-1){
       if (lch[node]<n) Code(lch[node],curamt+(5LL<<pos));
        if (lch[lch[node]]!=-1){
            dfs2(lch[lch[node]],curamt,pos+1,h+2);
        }
        if (rch[lch[node]]!=-1){
            dfs2(rch[lch[node]],curamt+(1LL<<pos),pos+3,h+2);
        }
    }
    if (rch[node]!=-1){
      if (rch[node]<n)  Code(rch[node],curamt+(7LL<<pos));
        if (lch[rch[node]]!=-1){
            dfs2(lch[rch[node]],curamt+(3LL<<pos),pos+3,h+2);
        }
        if (rch[rch[node]]!=-1){
            dfs2(rch[rch[node]],curamt+(7LL<<pos),pos+3,h+2);
        }
    }
}

void Encode(int N, int A[], int B[])
{
    n = N;
    memset(lch,-1,sizeof(lch));
    memset(rch,-1,sizeof(rch));
    curnodes = N;
    for (int x = 0; x<N-1; x++){
        adjl[A[x]].push_back(B[x]);
        adjl[B[x]].push_back(A[x]);
    }
    func(0,-1);
    dfs2(0,0,0,0);
}
#include "Device.h"
#include <bits/stdc++.h>
using namespace std;


const int cutoffval = 10;
const int cutoff2 = 3;

void InitDevice()
{
}

int Answer(long long S, long long T)
{
    string s1,s2;
    for (int x = 0; x<64; x++){
        if (S)s1.push_back((S&1)?'1':'0');
        S>>=1;
        if (T)s2.push_back((T&1)?'1':'0');
        T>>=1;
    }
    s1.pop_back();
    s2.pop_back();
    int h = 0;
    for (int x = 0; x<min(s1.size(),s2.size());){
        if (h>=cutoffval||h<=cutoff2){
            if (s1[x]!=s2[x]) return 2;
            x++; h++;
            continue;
        }
        if (s1[x]=='0'){
            if (s2[x]=='0') {
                x++; h+=2; continue;
            }
            if (s2[x+1]=='0'){
                if (s2.size()==x+2){
                    return 0;
                }
            }
            return 2;
        }
        else if (s2[x]=='0'){
            if (s1[x+1]=='0'){
                if (s1.size()==x+2){
                    return 1;
                }
            }
            return 2;
        }
        else if (min(s1.size(),s2.size())==x+2){
            if (s1[x]==s2[x] && s1[x+1]==s2[x+1]) {
                x+=2;
                h += 1;
                continue;
            }
            else{
                return 2;
            }
        }
        else{
            if (s1[x]==s2[x] && s1[x+1]==s2[x+1] && s1[x+2]==s2[x+2]){
                x+=3;
                h+=2;
                continue;
            }
            return 2;
        }
    }
    //printf("cmp %s %s\n",s1.c_str(),s2.c_str());
    return s1.size()<s2.size()?1:0;
    if (s1.size()<s2.size()){
        for (int x = 0; x<s1.size(); x++){
            if (s1[x]!=s2[x]) return 2;
        }
        return 1;
    }
    for (int x = 0; x<s2.size(); x++){
        if (s1[x]!=s2[x]) return 2;
    }
	return 0;
}

Compilation message

Device.cpp: In function 'int Answer(long long int, long long int)':
Device.cpp:25:22: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
   25 |     for (int x = 0; x<min(s1.size(),s2.size());){
      |                     ~^~~~~~~~~~~~~~~~~~~~~~~~~
Device.cpp:36:30: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   36 |                 if (s2.size()==x+2){
      |                     ~~~~~~~~~^~~~~
Device.cpp:44:30: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |                 if (s1.size()==x+2){
      |                     ~~~~~~~~~^~~~~
Device.cpp:50:42: warning: comparison of integer expressions of different signedness: 'const long unsigned int' and 'int' [-Wsign-compare]
   50 |         else if (min(s1.size(),s2.size())==x+2){
      |                  ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
Device.cpp:72:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |         for (int x = 0; x<s1.size(); x++){
      |                         ~^~~~~~~~~~
Device.cpp:77:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |     for (int x = 0; x<s2.size(); x++){
      |                     ~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 7 ms 10372 KB Output is correct
2 Correct 9 ms 10324 KB Output is correct
3 Correct 6 ms 10364 KB Output is correct
4 Correct 7 ms 10372 KB Output is correct
5 Correct 8 ms 10320 KB Output is correct
6 Correct 6 ms 10292 KB Output is correct
7 Correct 7 ms 10324 KB Output is correct
8 Correct 8 ms 10372 KB Output is correct
9 Correct 7 ms 10296 KB Output is correct
10 Correct 8 ms 10372 KB Output is correct
11 Correct 8 ms 10372 KB Output is correct
12 Correct 8 ms 10372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 317 ms 20128 KB Output is correct - L = 58616
2 Correct 280 ms 20216 KB Output is correct - L = 66736
3 Correct 294 ms 22748 KB Output is correct - L = 33937
4 Correct 298 ms 22752 KB Output is correct - L = 8190
5 Partially correct 804 ms 44908 KB Output is partially correct - L = 507848085
6 Partially correct 730 ms 43548 KB Output is partially correct - L = 511739028
7 Partially correct 717 ms 43412 KB Output is partially correct - L = 512495026
8 Correct 711 ms 43172 KB Output is correct - L = 2097151
9 Partially correct 946 ms 58140 KB Output is partially correct - L = 8589901824
10 Partially correct 1052 ms 59536 KB Output is partially correct - L = 8589901824
11 Partially correct 1109 ms 59708 KB Output is partially correct - L = 8589901824
12 Partially correct 943 ms 59764 KB Output is partially correct - L = 8589901824
13 Partially correct 881 ms 51596 KB Output is partially correct - L = 4294934528
14 Partially correct 719 ms 46876 KB Output is partially correct - L = 2147450880
15 Correct 267 ms 20808 KB Output is correct - L = 58208
16 Correct 294 ms 20756 KB Output is correct - L = 83130
17 Correct 275 ms 20748 KB Output is correct - L = 28048
18 Partially correct 856 ms 50468 KB Output is partially correct - L = 4294844416
19 Partially correct 1000 ms 51000 KB Output is partially correct - L = 4293959680
20 Partially correct 795 ms 50968 KB Output is partially correct - L = 4289888256
21 Partially correct 752 ms 48416 KB Output is partially correct - L = 4294950912
22 Partially correct 817 ms 49144 KB Output is partially correct - L = 4278345728
23 Partially correct 843 ms 46388 KB Output is partially correct - L = 4278345728
24 Partially correct 758 ms 47764 KB Output is partially correct - L = 2143774720
25 Partially correct 695 ms 45352 KB Output is partially correct - L = 2146307072
26 Partially correct 875 ms 45376 KB Output is partially correct - L = 1069706752
27 Partially correct 732 ms 45064 KB Output is partially correct - L = 535097216