Submission #93539

# Submission time Handle Problem Language Result Execution time Memory
93539 2019-01-09T12:31:57 Z keko37 Pictionary (COCI18_pictionary) C++14
14 / 140
451 ms 19012 KB
#include<bits/stdc++.h>

using namespace std;

const int MAXN = 100005;

int n, m, q;
int a[MAXN], b[MAXN], siz[MAXN], par[MAXN];
int low[MAXN], high[MAXN];
vector <int> v[MAXN];

void precompute () {
    for (int i=1; i<=n; i++) {
        low[i] = 1;
        high[i] = m;
    }
    for (int i=m; i>=1; i--) {
        for (int j=2*i; j<=n; j+=i) {
            v[i].push_back(j);
        }
    }
}

void build () {
    for (int i=1; i<=n; i++) {
        par[i] = i;
        siz[i] = 1;
    }
}

int nadi (int x) {
    if (x == par[x]) return x;
    par[x] = nadi(par[x]);
    return par[x];
}

void spoji (int x, int y) {
    x = nadi(x);
    y = nadi(y);
    if (x == y) return;
    if (siz[x] < siz[y]) swap(x, y);
    par[y] = x;
    if (siz[x] == siz[y]) siz[x]++;
}

bool bs () {
    for (int i=1; i<=m; i++) {
        v[i].clear();
    }
    for (int i=1; i<=q; i++) {
        v[(low[i] + high[i] + 1)/2].push_back(i);
    }
    build();
    bool ok = 1;
    for (int i=m; i>=1; i--) {
        for (int j=2*i; j<=n; j+=i) {
            spoji(i, j);
        }
        for (int j=0; j<v[i].size(); j++) {
            int ind = v[i] [j];
            //cout << "bla " << i << "  " << a[ind] << " " << b[ind] << endl;
            if (nadi(a[ind]) == nadi(b[ind])) {
                low[ind] = i;
            } else {
                high[ind] = i-1;
            }
            if (low[ind] != high[ind]) ok = 0;
        }
    }
    return ok;
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m >> q;
    precompute();
    for (int i=1; i<=q; i++) {
        cin >> a[i] >> b[i];
    }
    while (!bs());
    for (int i=1; i<=q; i++) {
        cout << m - low[i] + 1 << endl;
    }
    return 0;
}

Compilation message

pictionary.cpp: In function 'bool bs()':
pictionary.cpp:59:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j=0; j<v[i].size(); j++) {
                       ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 3192 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 32 ms 4088 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 108 ms 7660 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 152 ms 7780 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 114 ms 7916 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 141 ms 8344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 208 ms 11532 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 164 ms 8372 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 334 ms 15868 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 451 ms 19012 KB Output is correct
2 Correct 403 ms 17008 KB Output is correct