社区讨论

启发函数警示后人

P5507 机关参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mdep50f6
此快照首次捕获于
2025/07/22 23:35
8 个月前
此快照最后确认于
2025/11/04 03:54
4 个月前
查看原帖

本人最开始一直超时,后来无意间发现启发函数写错,希望警示后人(大悲)

最初的错误版

CPP
inline int f(string str) {
	int cnt = 0;
	for (int i = 0; i < str.length(); i++) {
		cnt += (str[i] - '1');
	}
	return cnt / 2;
}

第二个错误版

CPP
inline int f(string str) {
	int cnt = 0;
	for (int i = 0; i < str.length(); i++) {
		cnt += (5 - (str[i] - '0'));
	}
	return cnt / 2;
}

最终正确版(哭)

CPP
inline int f(string str) {
	int cnt = 0;
	for (int i = 0; i < str.length(); i++) {
		if (str[i] != '1')cnt += (5 - (str[i] - '0'));
	}
	return cnt / 2;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...