답안 #856989

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
856989 2023-10-05T07:24:16 Z iulia_morariu Speedrun (RMI21_speedrun) C++17
29 / 100
91 ms 1860 KB
#include <speedrun.h>
#include <bits/stdc++.h>

using namespace std;

void assignHints (int subtask , int N, int A[], int B[]){
    if(subtask == 1){
        setHintLen( N );

        for(int i = 1; i < N; i++){
            setHint( A[i], B[i], 1);
            setHint( B[i], A[i], 1);
        }
    }else if(subtask == 2){
        setHintLen(20);
        int vf[N + 1];
        for(int i = 1; i <= N; i++) vf[i] = 0;
        for(int i = 1; i < N; i++){
            vf[ A[i] ]++;
            vf[ B[i] ]++;
        }

        int nod = 0;
        for(int i = 1; i <= N; i++){
            if(vf[i] == N - 1) nod = i;
        }

        for(int i = 1; i < N; i++){
            for(int j = 0; j < 20; j++){
                bool set = 0;
                if( (nod & (1 << j)) ) set = 1;
                setHint(i, j + 1, set );
            }
        }
    }else{
        setHintLen(20);
        for(int i = 1; i < N; i++){
            for(int j = 0; j < 10; j++){
                bool set = 0;
                if( ( A[i] & (1 << j) ) ) set = 1;
                setHint(B[i], j, set);

                set = 0;
                if( ( B[i] & (1 << j) ) ) set = 1;
                setHint(A[i], j + 10, set);
            }
        }
    }
}

int vis[1001];
void dfs(int nd, int n){
    vis[nd] = 1;
    //cout << "Suntem la " << nd << endl;
    for(int i = 1; i <= n; i++){
        if( vis[i] || getHint(i) == 0 ) continue;
        //cout << "  -- > i = " << i << " getHint = " << getHint(i) << endl;
        goTo(i);
        vis[i] = 1;
        dfs(i, n);
        goTo(nd);
    }
}

void speedrun(int subtask , int N, int start ){
    if(subtask == 1){
        for(int i = 0; i <= N; i++) vis[i] = 0;
        vis[start] = 1;
        stack<int> s;
        s.push(start);

        dfs(start, N);
    }else if(subtask == 2){

        int nd = 0;
        for(int j = 0; j < 20; j++){
            nd += getHint(j + 1) * (1 << j);
        }

        if(nd != start){
            goTo( nd );
        }

        for(int i = 1; i <= N; i++){
            if(i == nd || i == start) continue;
            goTo(i);
            goTo(nd);
        }

    }else{

        int nod = start;
        while(true){
            int last = 0;
            for(int j = 1; j <= 10; j++){
                last += getHint(j) * (1 << (j - 1));
            }
            if(last == 0) break;
            goTo(last);
            nod = last;
        }

        //cout << "Am ajuns la nodul " << nod << endl;

        for(int i = 0; i < N - 1; i++){
            int next = 0;
            for(int j = 1; j <= 10; j++){
                next += getHint(j + 10) * (1 << (j - 1));
            }

            goTo(next);
        }


    }
}

Compilation message

speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:92:13: warning: variable 'nod' set but not used [-Wunused-but-set-variable]
   92 |         int nod = start;
      |             ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 1860 KB Output is correct
2 Correct 29 ms 1088 KB Output is correct
3 Correct 23 ms 1528 KB Output is correct
4 Correct 20 ms 1524 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 91 ms 1364 KB Output is correct
2 Correct 87 ms 1340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Invalid bit index for setHint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Invalid bit index for setHint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Invalid bit index for setHint
2 Halted 0 ms 0 KB -