1

我练习 C++ 解决一些练习,但一整天后,我无法解决它们。所以,我在网上搜索并找到了一个简短的解决方案,但是,我无法理解。

练习:http: //jeremiahflaga.blogspot.com/2011/09/milking-cows-programming-problem-from.html

解决方案 https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13658&lngWId=3

我很感兴趣,因为我想学习使用二进制数据解决问题,就像这个练习一样,所有数据都存储在一个 bitset 中。

因此,如果有人可以向我解释解决方案,那就太好了。

4

1 回答 1

2

解决方案所做的只是填充然后读取一个位集。

bitset 中每秒都有一个条目,每当有人在挤奶时,bitset 都设置为 1(它们在读取for(int j = begin + 1; j <= end; j++)循环中的输入时设置)。

然后,一旦读取了所有输入,并设置了所有适当的位,就会扫描位集以计算 0 和 1 的最长序列(从 0 到 1 的切换或反之亦然,由前一个位的值if(a[i] != toggler)在哪里检测)。toggler

如果您看不到上述内容,我建议将代码复制到 ide 或编辑器中并重新格式化,以便正确缩进。

这不是一个很好的解决方案。也许这是赢得比赛的正确方法,但它不是大多数人在正常情况下会编写的那种代码,因为它非常浪费内存。通常对于“现实生活”中的此类问题,您将使用(开始,结束)对来管理间隔,合并重叠间隔。

于 2012-07-23T00:06:19.850 回答