답안 #661167

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
661167 2022-11-24T20:04:50 Z as111 Type Printer (IOI08_printer) C++14
컴파일 오류
0 ms 0 KB
#include <iostream>
#include <vector>
#include <string>

#define MAXN 25000

using namespace std;

struct Trie {
	int nex[26]; // index of next trie for each letter
	int prev; // parent
	bool end; // end of a word
	Trie() {
		fill(nex, nex + 26, -1);
		prev = -1;
		end = false;
	}
};
Trie *tries[MAXN * 20 + 5];
int N;
char letters[200]; // store letter for each ascii value
int index = 1;
int wc = 0; //word count
void traverse(int curr) {
	for (int c = 0; c < 26; c++) { // loop through each letter
		if (tries[curr].nex[c] != -1) {
			cout << letters[c] << endl;
			traverse(tries[curr].nex[c]);
			if (wc == N) return;
 			cout << "-" << endl;
		}
	}
	if (tries[curr].end) {
		cout << "P" << endl;
		wc++;
	}
	return;
}
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++) {
		string str;
		cin >> str;
		int curr = 0;
		for (int j = 0; j < (int)str.length(); j++) {
			int c = (int)str[j] - 97;
			letters[c] = str[j];
			if (tries[curr].nex[c] != -1) { // prefix recorded previously
				curr = tries[curr].nex[c];
			}
			else {
				tries[curr].nex[c] = index;
				tries[index].prev = curr;
				curr = index;
				index++;
			}
			cout << curr << endl;
		}
		tries[curr].end = true;
		cout << endl;
	}
	int curr = 0;
	traverse(curr);
}

Compilation message

printer.cpp: In function 'void traverse(int)':
printer.cpp:26:19: error: request for member 'nex' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   26 |   if (tries[curr].nex[c] != -1) {
      |                   ^~~
printer.cpp:28:25: error: request for member 'nex' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   28 |    traverse(tries[curr].nex[c]);
      |                         ^~~
printer.cpp:33:18: error: request for member 'end' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   33 |  if (tries[curr].end) {
      |                  ^~~
printer.cpp: In function 'int main()':
printer.cpp:51:20: error: request for member 'nex' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   51 |    if (tries[curr].nex[c] != -1) { // prefix recorded previously
      |                    ^~~
printer.cpp:52:24: error: request for member 'nex' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   52 |     curr = tries[curr].nex[c];
      |                        ^~~
printer.cpp:55:17: error: request for member 'nex' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   55 |     tries[curr].nex[c] = index;
      |                 ^~~
printer.cpp:56:18: error: request for member 'prev' in 'tries[index]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   56 |     tries[index].prev = curr;
      |                  ^~~~
printer.cpp:62:15: error: request for member 'end' in 'tries[curr]', which is of pointer type 'Trie*' (maybe you meant to use '->' ?)
   62 |   tries[curr].end = true;
      |               ^~~