假设我们有一个包含 K 个元素的数组 A。考虑一下,在一场游戏中,有 N 个玩家,并且有一个游戏主持人。这个游戏有K轮。在第 i 轮游戏中,游戏主持人宣布将 A[i] 个孩子组成小组。然后剩下的孩子组成尽可能多的 A[i] 孩子组。一个孩子不能参加多个小组。没有组的人离开游戏。其他人进入下一轮。一轮可能没有玩家损失。最终,第K轮结束后,只剩下两个孩子,他们被宣布为获胜者。我们必须在开始之前找到游戏中可能存在的最小和最大的孩子数量,或者确定 N 不存在有效值。
因此,如果输入类似于 A = [3, 4 , 3, 2],那么输出将是 [6, 8],因为如果游戏以 6 个孩子开始,那么它会继续
在第 1 轮中,其中6人组成两组,每组3人
他们组成两组,分别有4个和2个孩子
立即学习“C++免费学习笔记(深入)”;
然后一组1 个孩子和 3 个孩子,1 个将离开游戏
他们三个组成 1 和 2 的一组。1 个将离开。
最后 2 个孩子被宣布为获胜者。
步骤
为了解决这个问题,我们将遵循以下步骤 –
n := size of ADefine a large array a, l, r, a of size: 100010.l := 2, r = 2for initialize i := 1, when i = 1, update (decrease i by 1), do: x := a[i], L := (l + x - 1) if L > R, then: return -1, 0 l := L, r = R + x - 1return l, r
登录后复制
示例
让我们看看以下实现,以便更好地理解 –
#include using namespace std;void solve(vector A){ int n = A.size(); int l, r, a[100010]; l = 2, r = 2; for (int i = 1; i = 1; i--){ int x = a[i], L = (l + x - 1) / x * x, R = r / x * x; if (L > R){ cout A = { 3, 4, 3, 2 }; solve(A);}
登录后复制
输入
{ 3, 4, 3, 2 }
登录后复制
输出
6, 8
登录后复制
以上就是C++ 程序以找到游戏开始前的最小和最大儿童数量的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2585929.html