第二天的桩数是否有效的 C++ 代码


假设我们有两个相同大小的数组 X 和 Y。第一天第一堆石子的数量是 X[i],第二天则为 Y[i]。第一天来了很多成员。他们要么什么都不做,要么往某些堆添加一些石子,要么从一堆石子中交换一些石子。我们必须检查 Y 是否从 X 衍生而来。

因此,如果输入类似 X = [1, 2, 3, 4, 5];Y = [2, 1, 4, 3, 5],则输出将为 True,因为从第二堆石子移动一块石子到第一堆石子,从第四堆石子移动一块石子到第三堆石子。

步骤

要解决这个问题,我们将遵循以下步骤 −

n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   s := s + A[i]
for initialize i := 0, when i < n, update (increase i by 1), do:
   d := d + B[i]
return (if d > s, then false, otherwise true)

示例

让我们看看以下实现以获得更好的理解 −

#include <bits/stdc++.h>
using namespace std;
bool solve(vector<int> A, vector<int> B){
   int n = A.size(), d = 0, s = 0;
   for (int i = 0; i < n; i++)
      s += A[i];
   for (int i = 0; i < n; i++)
      d += B[i];
   return d > s ? false : true;
}
int main(){
   vector<int> X = { 1, 2, 3, 4, 5 };
   vector<int> Y = { 2, 1, 4, 3, 5 };
   cout << solve(X, Y) << endl;
}

输入

{ 1, 2, 3, 4, 5 }, { 2, 1, 4, 3, 5 }

输出

1

更新于: 2022-03-29

143 次浏览

开启您的 职业

完成课程后获得认证

开始
广告
© . All rights reserved.