请! 这个问题该如何解答呢? (C++)


这是我在日常练习中遇到的一个问题:

农夫约翰有 N 头奶牛排成一排 (1≤N≤3⋅10^5)。 不幸的是,有一种疾病正在蔓延。 最初,一些奶牛开始受到感染。 每天晚上,一头受感染的奶牛都会将疾病传播给左右两侧的奶牛(如果存在的话)。 一旦奶牛被感染,她就会一直被感染。 经过几个夜晚后,农夫约翰意识到问题已经失控,因此他对他的奶牛进行了测试,以确定谁患病了。 找出可能开始患病的奶牛的最少数量。

输入格式
第一行包含 N,即 Farmer John 拥有的奶牛数量。
下一行包含仅由 1 和 0 组成的 N 个字符位串,其中 1 表示受感染的牛,0 表示经过若干夜晚后未受感染的牛。

输出格式
输出一个整数:可能开始患病的奶牛的最小数量。

样本输入:
5
11111
样本输出:
1
假设中间的牛是唯一一头被感染的牛。 那么奶牛会按照以下顺序被感染:

0晚:00100(第三头牛最初被感染)
1晚:01110(第二、第四头牛现已感染)
2晚:11111(第一头和第五头牛现已感染)
3晚:11111(所有奶牛都已被感染,因此没有其他奶牛被感染)

经过两个或更多晚上后,奶牛的最终状态将类似于输入。 还有许多其他初始状态和可能产生输入状态的夜晚数,例如:

0 晚:10001
1晚:11011
2晚:11111
或者:

0 晚:01001
1晚:11111
或者:

0 晚:01000
1晚:11100
2晚:11110
3晚:11111
所有这些初始状态都包含至少一头受感染的牛。

样本输入:
6
011101
样本输出:
4
唯一可能导致这种最终状态的初始状态和夜晚数是,如果没有经过任何夜晚,并且输入中的四头受感染奶牛中的每一头都开始患病。

评分:

* 输入3-7:N≤1000
* 输入 8-12:无附加约束。

我需要使用 C++ 来解决这个问题。

我尝试过的:

我试图想出一个解决方案,但现在我想我只知道如何做这个问题的相反:(我想不出一个解决方案。请帮助我!我是那种需要看到问题就解决吧,我只是个初学者,请大家帮忙!

解决方案1

如何解决所有约束条件下的这个问题[^] 获取建议的解决方案。
https://www.codeproject.com/script/Answers/Post.aspx?aid=5374347#
[edit]

引用:

我需要使用 C++ 来解决这个问题。

语言的选择并不重要。 解决此类问题的关键是找出找到解决方案所需的逻辑步骤。
[/edit]

コメント

タイトルとURLをコピーしました