답안 #336677

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
336677 2020-12-16T11:38:58 Z cheeheng 기지국 (IOI20_stations) C++14
10 / 100
1004 ms 1072 KB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> AdjList[1005];
int dist[1005];
int subtreeSize[1005];

int cnt = 0;
void dfs(int i, int k){
    if(dist[i] != -1){return;}
    dist[i] = cnt;
    cnt ++;
    //printf("dist[%d]=%d\n", i, dist[i]);
    subtreeSize[i] = 1;
    for(int v: AdjList[i]){
        if(dist[v] == -1){
            dfs(v, k);
            subtreeSize[i] += subtreeSize[v];
        }
    }
}

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
	std::vector<int> labels(n);
	cnt = 0;

	for(int i = 0; i < n; i ++){
        AdjList[i].clear();
	}

	int s = -1;
	memset(dist, -1, sizeof(dist));

	for(int i = 0; i < n-1; i ++){
        AdjList[u[i]].push_back(v[i]);
        AdjList[v[i]].push_back(u[i]);
	}

	/*
	for(int i = 0; i < n; i ++){
        if(AdjList[i].size() > 2){
            s = i;
            break;
        }
	}

	if(s == -1){
        for(int i = 0; i < n; i ++){
            if(AdjList[i].size() == 1){
                s = i;
                break;
            }
        }
	}

	dist[s] = 0;
	int cnt = 0;
	for(int v: AdjList[s]){
        dfs(v, cnt+1);
        cnt ++;
	}*/

	dfs(0, 0);

	for (int i = 0; i < n; i++) {
		labels[i] = dist[i]*1000 + subtreeSize[i];
	}
	return labels;
}

int find_next_station(int s, int t, std::vector<int> c) {
    //printf("s=%d t=%d c[0]=%d\n", s, t, c[0]);
    //sort(c.begin(), c.end());

    if(s < 1000){
        int indx = upper_bound(c.begin(), c.end(), t)-c.begin();
        assert(indx != 0);
        return c[indx-1];
    }

    if(s < t){
        // check if one is a parent of the other
        if( t/1000 >= (s/1000) + (s%1000) ){
            // s is not a parent of t
            //printf("Here\n");
            return c[0];
        }else{
            // s is a parent of t
            int indx = upper_bound(c.begin(), c.end(), t)-c.begin();
            assert(indx != 0);
            return c[indx-1];
        }
    }else{
        if( s/1000 >= (t/1000) + (t%1000) ){
            // s is not a parent of t
            //printf("Here\n");
            return c[0];
        }else{
            // s is a parent of t
            int indx = upper_bound(c.begin(), c.end(), s)-c.begin();
            assert(indx != 0);
            return c[indx-1];
        }
    }

    if(s/1000 == t/1000){
        // if one is a parent of the other
        if(s < t){
            return s+1;
        }else{
            return s-1;
        }
    }else{
        if(s%1000 == 1){
            return 0;
        }else{
            return s-1;
        }
    }

    /*int pow10[10];
    pow10[0] = 1;
    for(int i = 1; i < 10; i ++){
        pow10[i] = 10*pow10[i-1];
    }

    assert(s != t);

    for(int i = 1; i < 10; i ++){
        if(s == (t/pow10[i])){
            return t/pow10[i-1];
        }
    }

	return s/10;*/

    /*if(s == 0){
        return t/1000*1000+1;
    }

    if(s/1000 == t/1000){
        if(s < t){
            return s+1;
        }else{
            return s-1;
        }
    }else{
        if(s%1000 == 1){
            return 0;
        }else{
            return s-1;
        }
    }*/

    /*for(int i = 1; i < 11; i ++){
        if(s == (t>>i)){
            return (t>>(i-1));
        }
    }

	return s>>1;*/
}

Compilation message

stations.cpp: In function 'std::vector<int> label(int, int, std::vector<int>, std::vector<int>)':
stations.cpp:32:6: warning: unused variable 's' [-Wunused-variable]
   32 |  int s = -1;
      |      ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 492 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=1, label=6004
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 364 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=1, label=1511
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 574 ms 1068 KB Wrong query response.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 998 ms 992 KB Output is correct
2 Correct 808 ms 944 KB Output is correct
3 Correct 612 ms 736 KB Output is correct
4 Correct 3 ms 944 KB Output is correct
5 Correct 7 ms 864 KB Output is correct
6 Correct 2 ms 736 KB Output is correct
7 Correct 618 ms 864 KB Output is correct
8 Correct 1004 ms 864 KB Output is correct
9 Correct 733 ms 992 KB Output is correct
10 Correct 621 ms 864 KB Output is correct
11 Correct 7 ms 904 KB Output is correct
12 Correct 6 ms 736 KB Output is correct
13 Correct 6 ms 736 KB Output is correct
14 Correct 5 ms 736 KB Output is correct
15 Correct 2 ms 952 KB Output is correct
16 Correct 570 ms 736 KB Output is correct
17 Correct 531 ms 944 KB Output is correct
18 Correct 596 ms 1072 KB Output is correct
19 Correct 516 ms 1072 KB Output is correct
20 Correct 591 ms 864 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 587 ms 1072 KB Wrong query response.
2 Halted 0 ms 0 KB -