萌新求条,简单题都做错
查看原帖
萌新求条,简单题都做错
405146
Ruan_ji楼主2024/7/11 11:33

希望大佬能帮我看看为啥我的代码在运行样例的时候会输出两个NO,也帮我查查错,谢谢

#include <iostream>
#include <cstdio>
#include <cstring>

#define MAXN 100005

using namespace std;

int t;
int n;
int num;
int ss[11][MAXN];
string inn[MAXN];
int vis[MAXN];

int ctoi(char ch) {
	return ch - '0';
}

void init() {
	for (int i = 0; i <= 10; ++i) {
		for (int j = 0; j <= num; ++j) {
			ss[i][j] = 0;
		}
	}
	
	for (int i = 0; i <= num; ++i) 
		vis[i] = 0;
		
	num = 0;
}

void insert(string str) {
	int u = 0;
	for (int i = 0; i < str.length(); ++i) {
		int ch = str[i];
		if (ss[ctoi(ch)][u] == 0) {
			ss[ctoi(ch)][u] = ++num;
		}
		
		u = ss[ctoi(ch)][u];
		vis[u] += 1;
	}	
}

int search(string str) {
	int u = 0;
	for (int i = 0; i < str.length(); ++i) {
		char ch = str[i];
		if (ss[ctoi(ch)][u] == 0) {
			return 0;
		}
		u = ss[ctoi(ch)][u];
	}
	
	return vis[u];
}

int main() {
	cin >> t; 
	while (t--) {
		init();
		cin >> n;
		for (int i = 1; i <= n; ++i) {
			cin >> inn[i];
			insert(inn[i]);
		}	
		
		bool f = 0;
		int aaa;
		for (int i = 1; i <= n; ++i) {
			if (search(inn[i]) != 0) {
				aaa = i;
				f = 1;
				break;
			}
		}
		
		cout << aaa << endl;
		if (f == 1) {
			cout << "NO" << endl;
		}
		else 
			cout << "YES" << endl;
	}
	return 0;
}

对了,这道题的YES和NO的输出是反的,希望不要对大佬造成困惑。

感谢——————

2024/7/11 11:33
加载中...