제출 #1059718

#제출 시각아이디문제언어결과실행 시간메모리
1059718CyanberryTropical Garden (IOI11_garden)C++14
컴파일 에러
0 ms0 KiB
    #include <bits/stdc++.h>
#include "gardenlib.h"
    using namespace std;
     
    void count_routes(int fountains, int pathCount, int dest, vector<vector<int>> paths, int groupCount, vector<int> groups) {
        vector<vector<int>> graf(pathCount, vector<int>{});
        for (int i = 0; i < paths.size(); ++i) {
            graf[paths[i][0]].push_back(paths[i][1]);
            graf[paths[i][1]].push_back(paths[i][0]);
        }
        vector<int> lengths(pathCount, 0);
        for (int i = 0; i < pathCount; ++i) {
            if (lengths[i] == 0) {
                int counting = -1, curr = i, prev = -1, dist;
                // cout<<'+'<<i<<'\n';
                while (curr != dest) {
                    lengths[curr] = counting;
                    if (prev != graf[curr][0] || graf[curr].size() == 1) {
                        prev = curr;
                        curr = graf[curr][0];
                    } else {
                        prev = curr;
                        curr = graf[curr][1];
                    }
                    // cout<<counting<<'\n';
                    --counting;
                    if (lengths[curr] > 0) {
                        dist = lengths[curr] - counting + 1;
                        break;
                    }
                    if (lengths[curr] < 0 && lengths[curr] - counting > 2) {
                        dist = -1;
                        break;
                    }
                    if (curr == dest) {
                        dist = -counting;
                        break;
                    }
                    
                }
                curr = i, prev = -1;
                if (dist < 0) continue;
                while (curr != dest) {
                    if (lengths[curr] < 0) lengths[curr] += dist;
                    if (prev != graf[curr][0] || graf[curr].size() == 1) {
                        prev = curr;
                        curr = graf[curr][0];
                    } else {
                        prev = curr;
                        lengths[curr] += 2;
                        curr = graf[curr][1];
                    }
                    if (lengths[curr] > 0) {
                        break;
                    }
                    if (curr == dest) {
                        break;
                    }
                }
            }
        }
        int counting = 0, curr = dest, prev = -1;
        while (true) {
            if (prev != graf[curr][0] || graf[curr].size() == 1) {
                prev = curr;
                curr = graf[curr][0];
            } else {
                prev = curr;
                curr = graf[curr][1];
            }
            ++counting;
            if (curr == dest) {
                break;
            }
        }
        vector<int> answers(150010, 0);
        for (int i = 0; i < lengths.size(); ++i) {
            if (lengths[i] > 0) ++answers[lengths[i]];
        }
        for (int i = 0; i < counting; ++i) {
            for (int j = i; j < 150010; j += counting) {
                if (j > i) {
                    answers[j] += answers[j - counting];
                }
            }
        }
        for (int i : groups) {
            if (i < 150010) answer(answers[i]);
            else {
                i -= 150010;
                i %= counting;
                i -= counting;
                i += 150010;
                answer(answers[i]);
            }
        }
    }

컴파일 시 표준 에러 (stderr) 메시지

garden.cpp: In function 'void count_routes(int, int, int, std::vector<std::vector<int> >, int, std::vector<int>)':
garden.cpp:7:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    7 |         for (int i = 0; i < paths.size(); ++i) {
      |                         ~~^~~~~~~~~~~~~~
garden.cpp:77:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |         for (int i = 0; i < lengths.size(); ++i) {
      |                         ~~^~~~~~~~~~~~~~~~
garden.cpp:42:17: warning: 'dist' may be used uninitialized in this function [-Wmaybe-uninitialized]
   42 |                 if (dist < 0) continue;
      |                 ^~
/usr/bin/ld: /tmp/ccVB2tdp.o: in function `main':
grader.cpp:(.text.startup+0x3f): undefined reference to `count_routes(int, int, int, int (*) [2], int, int*)'
collect2: error: ld returned 1 exit status