刚学 SAM,求助一个小问题
查看原帖
刚学 SAM,求助一个小问题
56724
_LiM楼主2020/8/13 20:52

在写这个题的时候,我先后在更新答案部分采用了 2 个写法:

for (int i = 1; i <= le2n; ++i) {
		while (!all(s[0][i] - 'a') && allpar()) {
			for (int j = 1; j < n; ++j) {
				now[j] = par[now[j]];
				match = min(match, len[now[j]]);
			}
		}
		if (all(s[0][i] - 'a')) {
		//	++match;
			match = 0x3f3f3f3f;
			for (int j = 1; j < n; ++j) match = min(match, len[now[j]] + 1);
			for (int j = 1; j < n; ++j) now[j] = son[now[j]][s[0][i] - 'a'];
		} else match = 0;
		ans = max(ans, match);
	}

以及

for (int i = 1; i <= le2n; ++i) {
		while (!all(s[0][i] - 'a') && allpar()) {
			for (int j = 1; j < n; ++j) {
				now[j] = par[now[j]];
				match = min(match, len[now[j]]);
			}
		}
		if (all(s[0][i] - 'a')) {
			++match;
		//	match = 0x3f3f3f3f;
		//	for (int j = 1; j < n; ++j) match = min(match, len[now[j]] + 1);
			for (int j = 1; j < n; ++j) now[j] = son[now[j]][s[0][i] - 'a'];
		} else match = 0;
		ans = max(ans, match);
	}

区别仅在于注释部分。而后者求出的答案是正确的,前者是错误的。请问是为什么啊 /kk

如果是我的理解有问题请指出 /fad

2020/8/13 20:52
加载中...