Submission #242776

#TimeUsernameProblemLanguageResultExecution timeMemory
242776osaaateiasavtnlAirline Route Map (JOI18_airline)C++17
22 / 100
903 ms30784 KiB
#include<bits/stdc++.h>
#include "Alicelib.h"
using namespace std;
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcountll
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC
void Alice( int N, int M, int A[], int B[] ){   
    /*
    InitG( 3, 2 );
    MakeG( 1, 2 );
    MakeG( 1, 3 );
    */

    vector <ii> ans;
    for (int i = 0; i < M; ++i)
        ans.app(mp(A[i], B[i]));

    // N ... N + 9 - bits
    for (int i = N; i < N + 9; ++i)
        ans.app(mp(i, i + 1));

    // N + 10, N + 11 - centers
    ans.app(mp(N+10, N+11));
    for (int i = 0; i < N; ++i) {
        ans.app(mp(i, N + 10));
        ans.app(mp(i, N + 11));
    }       

    for (int i = N+1; i < N + 10; i += 2)
        ans.app(mp(i, N + 10));
    for (int i = N+2; i < N + 10; i += 2)
        ans.app(mp(i, N + 11));

    for (int u = 0; u < N; ++u)
        for (int bit = 0; bit < 10; ++bit)
            if ((u >> bit) & 1)
                ans.app(mp(u, N+bit));

    vector <int> pw(N+12);
    for (auto e : ans) {
        ++pw[e.f];
        ++pw[e.s];
    }   

    for (int i = N; i < N + 10; ++i) {
        if (pw[i] >= min(pw[N+10], pw[N+11])) {
            cout << "LMAO bit " << i - N << ' ' << pw[i] << endl;
            exit(1);
        }   
    }   

    InitG(N + 12, ans.size());
    int ptr = 0;
    for (auto e : ans) {
        MakeG(ptr++, e.f, e.s);
        //cout << e.f << ' ' << e.s << endl;
    }
}

#include<bits/stdc++.h>
#include "Boblib.h"
using namespace std;
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcountll
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC

const int N = 2007;
bool g[N][N];

void Bob( int V, int E, int C[], int D[] ){
    int n = V - 12;
    vector <int> pw(V);
    for (int i = 0; i < E; ++i) {
        ++pw[C[i]];
        ++pw[D[i]];
        g[C[i]][D[i]] = g[D[i]][C[i]] = 1;
    }
    
    vector <int> ord;
    for (int i = 0; i < V; ++i)
        ord.app(i);
    auto comp = [&](int u, int v) {
        return pw[u] < pw[v];
    };
    sort(all(ord), comp);

    vector <int> cen = {ord[V - 2], ord[V - 1]};
    vector <int> bit;
    for (int i = 0; i < V; ++i) {
        int tocen = 0;
        for (auto e : cen) {
            tocen += g[i][e];
            if (e == i)
                tocen += 100;
        }
        if (tocen < 2) {
            bit.app(i);
        }   
    }   

    for (int i = 0; i < bit.size(); ++i) {
        int tocen = 0;
        for (auto e : cen) {
            tocen += g[bit[i]][e];
            if (e == bit[i])
                tocen += 100;
        }
        if (tocen == 0) {
            swap(bit[0], bit[i]);
            break;
        }
    }   

    for (int i = 1; i < bit.size(); ++i) {
        int prv = bit[i-1];
        for (int j = i; j < bit.size(); ++j) {
            if (g[prv][bit[j]]) {
                swap(bit[i], bit[j]);
                break;
            }   
        }   
    }   

    vector <int> real;
    for (int i = 0; i < V; ++i) {
        if (!g[i][cen[0]] || !g[i][cen[1]])
            continue;
        real.app(i);
    }   

    vector <int> num;
    for (auto e : real) {
        int x = 0;
        for (int i = 0; i < 10; ++i)
            if (g[e][bit[i]])
                x += 1 << i;
        num.app(x);
    }   

    /*
    InitMap( 3, 2 );
    MakeMap( 1, 2 );
    MakeMap( 1, 3 );
    */

    vector <ii> ans;
    for (int i = 0; i < real.size(); ++i)   
        for (int j = i+1; j < real.size(); ++j)
            if (g[real[i]][real[j]]) {

                //cout << "add " << num[i] << ' ' << num[j] << endl;

                ans.app(mp(num[i], num[j]));
            }
    InitMap(n, ans.size());
    for (auto e : ans)
        MakeMap(e.f, e.s);
}

Compilation message (stderr)

Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:48:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < bit.size(); ++i) {
                     ~~^~~~~~~~~~~~
Bob.cpp:61:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < bit.size(); ++i) {
                     ~~^~~~~~~~~~~~
Bob.cpp:63:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = i; j < bit.size(); ++j) {
                         ~~^~~~~~~~~~~~
Bob.cpp:94:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < real.size(); ++i)   
                     ~~^~~~~~~~~~~~~
Bob.cpp:95:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = i+1; j < real.size(); ++j)
                           ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...