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

Compiler report

input/code.cpp:3:9: error: macro names must be identifiers
    3 | #define ÄÄR 9999
      |         ^
input/code.cpp:21:6: error: stray '\344' in program
   21 | int lähin(int etä[], bool käyty[]) {
      |      ^
input/code.cpp:21:17: error: stray '\344' in program
   21 | int lähin(int etä[], bool käyty[]) {
      |                 ^
input/code.cpp:21:28: error: stray '\344' in program
   21 | int lähin(int etä[], bool käyty[]) {
      |                            ^
input/code.cpp:25:23: error: stray '\344' in program
   25 |                 if (!käyty[i] && etä[i] < min) {
      |                       ^
input/code.cpp:25:36: error: stray '\344' in program
   25 |                 if (!käyty[i] && etä[i] < min) {
      |                                    ^
input/code.cpp:26:33: error: stray '\344' in program
   26 |                         min = etä[i];
      |                                 ^
input/code.cpp:41:48: error: stray '\304' in program
   41 |...

Code

#include <bits/stdc++.h>

#define ÄÄR 9999

using namespace std;

int N, alk, matkat[6][6];
int** vaihtoehdot;
vector<int> satamat;

vector<int> split(const string& str, char delimiter) {
	vector<int> tokens;
	string token;
	istringstream tokenStream(str);
	while (getline(tokenStream, token, delimiter)) {
		tokens.push_back(stoi(token));
	}
	return tokens;
}

int lähin(int etä[], bool käyty[]) {
	int k = 0;
	int min = INT_MAX;
	for (int i = 0; i < N; i++) {
		if (!käyty[i] && etä[i] < min) {
			min = etä[i];
			k = i;
		}
	}
	return k;
}

void init() {
	for (int k = 0; k < N; k++) {
		for (int j = 0; j < N; j++) {
			if (k == j) {
				matkat[k][j] = 0;
			}

			else if (matkat[k][j] == 0) {
				matkat[k][j] = ÄÄR;
			}
		}
	}
	int rivit = N, pylväät = satamat.size();
	vaihtoehdot = new int* [rivit];
	if (rivit)
	{
		vaihtoehdot[0] = new int[rivit * pylväät];
		for (int i = 1; i < rivit; ++i)
			vaihtoehdot[i] = vaihtoehdot[0] + i * pylväät;
	}
}

void laskenta(int pylväs, int alk) {

	int par[100], etä[100];
	bool käyty[100] = { 0 };
	fill(etä, etä + N, INT_MAX);

	alk = satamat[pylväs];

	etä[alk] = 0;
	par[alk] = -1;

	for (int g = 0; g < N - 1; g++) {
		int u = lähin(etä, käyty);
		käyty[u] = true;
		for (int v = 0; v < N; v++) {
			if (alk == v) {
				etä[v] = 0;
				vaihtoehdot[v][pylväs] = etä[v];
			}
			if (!käyty[v] && (etä[u] + matkat[u][v]) < etä[v] && matkat[u][v] != 9999)
			{
				par[v] = u;
				etä[v] = etä[u] + matkat[u][v];
				vaihtoehdot[v][pylväs] = etä[v];
				

			}
		}
	}



}

void näytä() {

	cout << "Satamat ovat ";
	for (int l = 0; l < satamat.size(); l++) {
		cout << satamat[l] + 1 << " ";
	}

	cout << endl;

	cout << "Kaupunki:" << "\t\t\t";

	for (int y = 0; y < satamat.size(); y++) {
		cout << "Satama" << y << ":" << "\t\t\t";
	}
	cout << endl;
	for (int t = 0; t < N; t++) {

		cout << t << "\t\t\t";
		for (int u = 0; u < satamat.size(); u++) {
			cout << vaihtoehdot[t][u] << "\t\t\t";
		}
		cout << endl;

	}

}


int main() {
	cin >> N;
	string inputString;
	cin.ignore();
	getline(cin, inputString);
	stringstream stream(inputString);
	std::vector<int> välisatamat;
	int n;
	while (stream >> n) {

		välisatamat.push_back(n);
	}
	for (int z = 0; z < välisatamat.size(); z++) {
		if (välisatamat[z] == 0) {
			satamat.push_back(z);
		}
	}
	
	int satamaMäärä = satamat.size();
	int rivimäärä = N;
	int laskuri = 0;
	for (int i = 0; i < rivimäärä - 1; i++) {
		string line;
		getline(cin, line);
		vector<int> rivi = split(line, ' ');
		istringstream iss(line);
		int num;
		iss >> num;
		rivi.push_back(num);
		matkat[rivi[0] - 1][rivi[1] - 1] = rivi[2];
		matkat[rivi[1] - 1][rivi[0] - 1] = rivi[2];
	}

	init();
	for (int g = 0; g < satamat.size(); g++) {
		laskenta(g, satamat[g]);
	}



	int laskin = 0;

	
		
	for (int j = 0; j < N; j++) {
		int pienin = ÄÄR;
		for (int i = 0; i < satamat.size(); i++) {
				
				
			if (*vaihtoehdot[j, i] < pienin) {
				pienin = *vaihtoehdot[j, i];
			}
		}
		laskin += pienin;
	}

	cout << laskin;
		
	


}