Submission #1300031

#TimeUsernameProblemLanguageResultExecution timeMemory
1300031FaggiGame (IOI14_game)C++20
42 / 100
1096 ms13444 KiB
#include <bits/stdc++.h>
#define ll int
#define all(x) x.begin(),x.end()
#define sz(x) int(x.size())
#define pb push_back
#define fr first
#define se second
#define mp make_pair
using namespace std;

const int MAXN=1501;

mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
bool arb[MAXN][MAXN], vis[MAXN];
vector<ll>grafo[MAXN];
ll memo[MAXN][MAXN], N;

vector<pair<ll,ll>>ars;

void arm(ll nod)
{
    vis[nod]=1;
    for(auto i:grafo[nod])
    {
        if(!vis[i])
        {
            ars.pb({nod,i});
            arb[nod][i]=arb[i][nod]=1;
            arm(i);
        }
    }
}
ll vivas;
void initialize(int n) {
    srand(time(NULL));
    N=n;
    vivas=(N*(N-1))/2;
    ll i, j;
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            if(i!=j)
                grafo[i].pb(j);
            memo[i][j]=-1;
        }
    for(i=0; i<n; i++)
        random_shuffle(all(grafo[i]));
    arm(rng()%n);
}

bool isconex()
{
    memset(vis,0,sizeof(vis));
    vector<pair<ll,ll>>ant=ars;
    for(auto k:ars)
        arb[k.fr][k.se]=arb[k.se][k.fr]=0;
    ars.resize(0);
    arm(rng()%N);
    for(ll i=0; i<N; i++)
        if(!vis[i])
        {
            swap(ant,ars);
            for(auto k:ars)
                arb[k.fr][k.se]=arb[k.se][k.fr]=1;
            return 0;
        }
    return 1;
}

void bor(ll u, ll v)
{
    vector<ll>vec;
    for(auto k:grafo[u])
        if(k!=v)
            vec.pb(k);
    swap(vec,grafo[u]);
}

int hasEdge(int u, int v) {
    if(vivas==N-1)
        return 1;
    if(u==v)
        return 0;
    if(memo[u][v]!=-1)
        return memo[u][v];
    bor(u,v);
    bor(v,u);
    if(!arb[u][v])
    {
        memo[u][v]=memo[v][u]=0;
        vivas--;
        return 0;
    }
    if(isconex())
    {
        memo[u][v]=memo[v][u]=0;
        vivas--;
        return 0;
    }
    grafo[u].pb(v);
    grafo[v].pb(u);
    memo[u][v]=memo[v][u]=1;
    return 1;
}

Compilation message (stderr)

game.cpp: In function 'void initialize(int)':
game.cpp:47:23: warning: 'void std::random_shuffle(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<int*, vector<int> >]' is deprecated: use 'std::shuffle' instead [-Wdeprecated-declarations]
   47 |         random_shuffle(all(grafo[i]));
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:51,
                 from game.cpp:1:
/usr/include/c++/13/bits/stl_algo.h:4581:5: note: declared here
 4581 |     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
      |     ^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...