CSES - Datatähti 2023 alku - Results
Submission details
Task:Sadonkorjuu
Sender:adex720
Submission time:2022-11-12 23:22:12 +0200
Language:C++ (C++17)
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'std::vector<std::__cxx11::basic_string<char> > split(std::string, int)':
input/code.cpp:59:9: error: declaration of 'int pituus' shadows a parameter
   59 |     int pituus = teksti.length();
      |         ^~~~~~
input/code.cpp:54:41: note: 'int pituus' previously declared here
   54 | vector<string> split(string teksti, int pituus)
      |                                     ~~~~^~~~~~

Code

#include <bits/stdc++.h>
#include <utility>
using namespace std;

class Kaupunki
{
public:
    bool pelto;
    int satamaan;

    vector<pair<Kaupunki, int>> naapurit;

    Kaupunki()
    {
        pelto = false;
        satamaan = 0x7FFFFFFF;
    }

    void lisaaNaapuri(Kaupunki itse, Kaupunki kaupunki, int etaisyys, bool takaisin)
    {
        if (pelto)
        {
            int matkaSatamaan = kaupunki.satamaan != 0x7FFFFFFF ? kaupunki.satamaan + etaisyys : 0x7FFFFFFF;
            if (matkaSatamaan < satamaan)
            {
                satamaan = matkaSatamaan;
                for (pair<Kaupunki, int> polku : naapurit)
                {
                    int pituus = matkaSatamaan + polku.second;
                    if (polku.first.satamaan > pituus)
                        polku.first.paivitaEtaisyysSatamaan(pituus);
                }
            }
        }

        pair<Kaupunki, int> polku = pair(kaupunki, etaisyys);
        naapurit.push_back(polku);
        if (takaisin)
            kaupunki.lisaaNaapuri(kaupunki, itse, etaisyys, false);
    }

    void paivitaEtaisyysSatamaan(int etaisyys)
    {
        satamaan = etaisyys;
        for (pair<Kaupunki, int> yhteys : naapurit)
        {
            int pituus = etaisyys + yhteys.second;
            if (yhteys.first.satamaan > pituus)
                yhteys.first.paivitaEtaisyysSatamaan(pituus);
        }
    }
};

vector<string> split(string teksti, int pituus)
{
    vector<string> jaettu(pituus);

    string osa;
    int pituus = teksti.length();
    for (int i = 0; i < pituus; i++)
    {
        char nykyinen = teksti[i];
        if (nykyinen == ' ')
        {
            jaettu.push_back(osa);
            osa = "";
        }
        else
        {
            osa += nykyinen;
        }
    }

    jaettu.push_back(osa);

    return jaettu;
}

int main()
{
    int n;
    std::cin >> n;

    string pellotRaw;
    cin >> pellotRaw;

    Kaupunki kaupungit[n];

    string onko;
    cin >> onko;
    vector<string> satamat = split(onko, n);

    for (int i = 0; i < n; i++)
    {
        kaupungit[i] = Kaupunki();
        kaupungit[i].pelto = satamat.at(i)[0] == '1';
    }

    for (int i = 0; i < n - 1; i++)
    {
        string matkat;
        cin >> matkat;

        vector<string> syote = split(matkat, 3);
        int kaupunki1Id = stoi(syote.at(0)) - 1;
        int kaupunki2Id = stoi(syote[1]) - 1;
        kaupungit[kaupunki1Id].lisaaNaapuri(kaupungit[kaupunki1Id], kaupungit[kaupunki2Id], stoi(syote[2]), true);
    }

    int yhteensa = 0;
    for (int i = 0; i < n; i++)
    {
        yhteensa += kaupungit[i].satamaan;
    }

    cout << yhteensa;
}