สมมติว่าเรามีอาร์เรย์ X และ Y ขนาดเท่ากัน มีกองหิน X[i] ลูกที่ดัชนี i ในวันแรก และวันที่สองดัชนี i มี Y[i] ลูก ในวันแรกมีสมาชิกมาหลายคน แต่ละคนจะไม่ทำอะไร เพิ่มหินไปที่กองบางกอง หรือย้ายหินจากกองหนึ่งไปอีกกองหนึ่ง เราต้องตรวจสอบว่า Y ถูกต้องจาก X หรือไม่
เช่น ถ้าอินพุตคือ X = [1, 2, 3, 4, 5]; Y = [2, 1, 4, 3, 5] เอาต์พุตจะเป็น True เพราะย้ายหิน 1 ลูกจากกองที่ 2 ไปกองที่ 1 และจากกองที่ 4 ไปกองที่ 3
ขั้นตอนการแก้ปัญหา
n := ขนาดของ A
for i := 0 ถึง n-1:
s := s + A[i]
for i := 0 ถึง n-1:
d := d + B[i]
return (ถ้า d > s แล้ว false มิฉะนั้น 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