问题与不足——海明距离

其实这是道很简单的搜索题,但是写完后感觉自己有很多问题,在此总结。

题目大意

对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数
给你一些01串,每个二进制串都默认长度二十,求最小海明距离
最多有100000个串

分析

暴力当然是两两枚举了。

其实正解也是暴力,考虑到长度只有二十,他们变化最终也只有一百万左右种,然后用bfs每次对于队列中的一个数,都改变一位。明显,最先找到的相同的数,所来自的不同的数根源,就是距离最小的,因为他们改变的数是最少的,海明距离就是最小的。

总结

虽然题目很简单,但是打完之后,却总觉得打得不对,总有问题。结果证明真的有问题,调了半天原来是没有想到bfs找到答案时的细节:因为出答案的bfs到的那一层,是有可能与上一层匹配的,而如果本层和本层先找到匹配就直接跳出,会忽略前面的情况
导致答案大了1。

这个问题不是第一次犯了,想了很久,终于发现原因。平时每次打题前很兴奋,掌握大概步骤就开打了,殊不知是在碰运气,细节太多的题目,根本保证不了正确性。即使是这一题,没有想好处理答案就打,最后忽略掉,debug半天才找出错,然后还要对之前的程序各个部分开刀,极大浪费时间。就是因为一时之懒。这样每每一时懒,久而久之就越来越多思维漏洞,越来越不自信。从而打题越来越慢,越慢就越不想想,恶性循环。

不只是信息学,平时文化课,特别是理科问题尤其凸显,文科也有一些。平时不认真,只是草草算个答案,考试就无所适从了,简单题弄好几遍还能错。我觉得语文老师说的一句话很对:做过一道题,就要认真对待,不然根本无用。贪图一时之快,痛苦长久。

没有个认真的态度去做事,生活会很乱,如果这样,倒不如躺在床上什么都不干算了。应付的事会有,但不能很多。

幸好早发现,在还没有什么大恶果的时候。

你可能感兴趣的:(问题与不足——海明距离)