답안 #858908

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
858908 2023-10-09T11:34:35 Z teamariaa Speedrun (RMI21_speedrun) C++17
29 / 100
25 ms 2032 KB
#include <bits/stdc++.h>
#include "speedrun.h"

using namespace std;

#define MAX_N 1000

int n;
bitset <MAX_N + 1> viz;
vector <int> degree;

void assign1(int a[], int b[])
{
    setHintLen(n);
    for(int i = 1; i < n; i ++)
    {
        setHint(a[i], b[i], 1);
        setHint(b[i], a[i], 1);
    }
}

void setNumber(int poz, int x, int y)
{
    while(y)
    {
        if(y & 1)
            setHint(x, poz, 1);
        y >>= 1;
        poz --;
    }
}

void assign2(int a[], int b[])
{
    if(n == 1)
        return;

    int center;
    degree.resize(n + 1, 0);
    setHintLen(10);

    for(int i = 1; i < n; i ++)
    {
        degree[a[i]] ++;
        degree[b[i]] ++;
        if(degree[a[i]] == 1)
        {
            center = b[i];
            setNumber(10 * degree[a[i]], a[i], b[i]);
        }

        if(degree[b[i]] == 1)
        {
            center = a[i];
            setNumber(10 * degree[b[i]], b[i], a[i]);
        }
    }

    for(int i = 1; i <= 10; i ++)
        setHint(center, i, 0);
}

void assign3()
{

}

void assign4()
{

}

void dfs(int node, int parent)
{
    viz[node] = 1;
    for(int i = 1; i <= n; i ++)
        if(getHint(i)  &&  !viz[i])
        {
            goTo(i);
            dfs(i, node);
        }
    goTo(parent);
}

void speedrun1(int root)
{
    dfs(root, root);
}

int getNumber(int poz, int node)
{
    int start = poz - 10 + 1, nr = 0;
    for(int i = start; i <= poz; i ++)
    {
        nr <<= 1;
        nr += getHint(i);
//        cerr << nr << endl;
    }
    return nr;
}

void speedrun2(int root)
{
    int nr = getNumber(10, root), center = root;
//    cout << "se incepe din :" << nr << endl;
    if(nr)
    {
        goTo(nr);
        center = nr;
    }

//    cerr << nr << " " << center << endl;
    for(int i = 1; i <= n ; i ++)
    {
        if(i != center)
        {
//            cerr << i << endl;
            goTo(i);
            goTo(center);
        }
    }

}

void speedrun3(int root)
{

}


void assignHints(int subtask, int N, int A[], int B[])
{
    n = N;
    if(subtask == 1)
    {
        assign1(A, B);
        return;
    }
    else if(subtask == 2)
    {
        assign2(A, B);
    }
    else if(subtask == 3)
    {
        assign3();
    }
}

void speedrun(int subtask, int N, int start)
{
    n = N;
    if(subtask == 1)
    {
        speedrun1(start);
        return;
    }
    else if(subtask == 2)
    {
        speedrun2(start);
        return;
    }
}

Compilation message

speedrun.cpp: In function 'void assign2(int*, int*)':
speedrun.cpp:60:16: warning: 'center' may be used uninitialized in this function [-Wmaybe-uninitialized]
   60 |         setHint(center, i, 0);
      |         ~~~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 1264 KB Output is correct
2 Correct 21 ms 2032 KB Output is correct
3 Correct 25 ms 940 KB Output is correct
4 Correct 22 ms 1136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 1188 KB Output is correct
2 Correct 22 ms 1456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB setHintLen was never called
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB setHintLen was never called
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB setHintLen was never called
2 Halted 0 ms 0 KB -