답안 #505058

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
505058 2022-01-10T12:46:43 Z duchung Speedrun (RMI21_speedrun) C++17
8 / 100
494 ms 816 KB
#include<bits/stdc++.h>
 
#include "speedrun.h"
using namespace std;
 
const int N = 1005;
 
int timer = 0;
vector<int> edge[N];
int parent[N] , tin[N] , Euler[N];
 
void dfs(int u)
{
	tin[u] = ++timer;
	Euler[timer] = u;
	for (int v : edge[u])
	{
		if (v == parent[u]) continue;
		parent[v] = u;
		dfs(v);
	}
}
 
void assignHints (int subtask , int n , int eu[] , int ev[])
{
	for (int i = 1 ; i < n ; ++i)
	{
		edge[eu[i]].push_back(ev[i]);
		edge[ev[i]].push_back(eu[i]);
	}
	dfs(1);
 
	setHintLen(20);
 
	for (int u = 1 ; u <= n ; ++u)
	{
		int v;
 
		if (u != 1)
		{
			v = parent[u];
			for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 1 , v >> j & 1);
		}
 
		if (tin[u] == n) v = 1;
		else v = Euler[tin[u] + 1];
		for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 11 , v >> j & 1);
	}
}
 
pair<int , int> Hint[N];
bool visited[N];
 
void get_val(int cur)
{
	for (int j = 0 ; j < 10 ; ++j) if (getHint(j + 1)) Hint[cur].first ^= 1 << j;
	for (int j = 10 ; j < 20 ; ++j) if (getHint(j + 1)) Hint[cur].second ^= 1 << (j - 10);
}
 
void speedrun(int subtask , int n , int cur)
{
	int l = getLength();
 
	int cnt = 1;
	while(cnt < n)
	{
		if (!visited[cur])
        {
            get_val(cur);
            visited[cur] = true;
        }
 
		// cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n";
 
		if (tin[cur] == n)
		{
			while(cur != 1)
			{
				if (!visited[cur])
                {
                    get_val(cur);
                    visited[cur] = true;
                }
 
				goTo(Hint[cur].first);
				cur = Hint[cur].first;
			}
		}
		else
		{
			int tmp = Hint[cur].second;
			while (!goTo(tmp))
			{
				goTo(Hint[cur].first);
			}
			cur = tmp;
		}
 
		++cnt;
	}
}

Compilation message

speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:62:6: warning: unused variable 'l' [-Wunused-variable]
   62 |  int l = getLength();
      |      ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 175 ms 688 KB Used too many wrong interactions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 191 ms 816 KB Output is correct
2 Correct 182 ms 660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 130 ms 660 KB Used too many wrong interactions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 494 ms 676 KB Used too many wrong interactions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 211 ms 660 KB Used too many wrong interactions
2 Halted 0 ms 0 KB -