Submission #1082235

#TimeUsernameProblemLanguageResultExecution timeMemory
1082235PanosPaskTowns (IOI15_towns)C++14
35 / 100
14 ms468 KiB
#include "towns.h"
#include <vector>

using namespace std;

int N;
int diameter = 0;
vector<int> d1;
vector<int> d2;

void findAll(int u, vector<int>& d)
{
    d.resize(N);

    d[u] = 0;
    for (int i = 0; i < N; i++) {
        if (i != u) {
            d[i] = getDistance(u, i);
        }
    }
}

int getPos(vector<int>& d)
{
    int m_i = -1;
    int m_v = -1;

    for (int i = 0; i < N; i++) {
        if (d[i] > m_v) {
            m_i = i;
            m_v = d[i];
        }
    }

    return m_i;
}

// Projecting to the diameter counting from n_i
int projection(int u, vector<int>& d)
{
    int pathlen = (d1[u] + d2[u] - diameter) / 2;

    return d[u] - pathlen;
}

int hubDistance(int n, int sub) 
{
    N = n;

    findAll(0, d1);
    int n1 = getPos(d1);
    findAll(n1, d1);
    int n2 = getPos(d1);
    findAll(n2, d2);

    diameter = d1[n2];

    int ans = 1e9 + 7;
    bool balanced = false;
    for (int i = 0; i < N; i++) {
        int res = max(projection(i, d1), projection(i, d2));

        if (res <= ans) {
            if (res < ans) {
                balanced = false;
            }
            ans = res;

            int cmp = projection(i, d1);
            int a = 0, b = 0, c = 0;

            for (int j = 0; j < N; j++) {
                int p = projection(j, d1);

                if (p < cmp) {
                    a++;
                }
                else if (p > cmp) {
                    b++;
                }
                else {
                    c++;
                }
            }

            balanced = balanced || (max(max(a, b), c) <= N / 2);
        }
    }

    if (balanced) {
        return ans;
    }
    else {
        return -ans;
    }
}

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:46:28: warning: unused parameter 'sub' [-Wunused-parameter]
   46 | int hubDistance(int n, int sub)
      |                        ~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...