Submission #1097380

#TimeUsernameProblemLanguageResultExecution timeMemory
1097380heeheeheehaawSpeedrun (RMI21_speedrun)C++17
100 / 100
139 ms1132 KiB
#include <bits/stdc++.h>
#include "speedrun.h"

using namespace std;

vector<int> adj[1005];
bool visited[1005];
vector<int> ord;
int parent[1005];
int vis[1005];

void dfs(int nod, int par)
{
    parent[nod] = par;
    if(!visited[nod])
        visited[nod] = true, ord.push_back(nod);
    for(auto it : adj[nod])
    {
        if(it != par)
            dfs(it, nod);
    }
}

void assignHints(int subtask, int n, int a[], int b[])
{
    setHintLen(20);
    for(int i = 1; i < n; i++)
    {
        adj[a[i]].push_back(b[i]);
        adj[b[i]].push_back(a[i]);
    }

    dfs(1, 1);

    for(int i = 0; i < ord.size() - 1; i++)
    {
        for(int b = 0; b < 10; b++)
        {
            if(((1 << b) & (ord[i + 1])) != 0)
                setHint(ord[i], b + 1, 1);
            else
                setHint(ord[i], b + 1, 0);
        }
    }

    for(int i = 0; i < ord.size(); i++)
    {
        for(int b = 0; b < 10; b++)
        {
            if(((1 << b) & parent[ord[i]]) != 0)
                setHint(ord[i], b + 1 + 10, 1);
            else
                setHint(ord[i], b + 1 + 10, 0);
        }
    }

    for(int b = 0; b < 10; b++)
    {
        if(((1 << b) & (ord[0])) != 0)
            setHint(ord.back(), b + 1, 1);
        else
            setHint(ord.back(), b + 1, 0);
    }
}

void speedrun(int subtask, int n, int start)
{
    int curr = start, cnt = n, nxt = -1;
    while(cnt > 0)
    {
        if(vis[curr] == 0)
            cnt--, vis[curr] = 1;
        int u = 0, par = 0;
        for(int i = 1; i <= 10; i++)
            u += (1 << (i - 1)) * getHint(i);
        if(nxt != -1)
            u = nxt;
        for(int i = 11; i <= 20; i++)
            par += (1 << (i - 1 - 10)) * getHint(i);
        bool ok = goTo(u);
        if(ok == true)
        {
            curr = u;
            nxt = -1;
        }
        else
        {
            goTo(par);
            curr = par;
            nxt = u;
        }
    }

    return;
}


Compilation message (stderr)

speedrun.cpp: In function 'void assignHints(int, int, int*, int*)':
speedrun.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i = 0; i < ord.size() - 1; i++)
      |                    ~~^~~~~~~~~~~~~~~~
speedrun.cpp:46:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |     for(int i = 0; i < ord.size(); i++)
      |                    ~~^~~~~~~~~~~~
#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...