สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n และอีกจำนวนหนึ่งคือ k มีกองขนมจำนวน n กอง กอง ith มีจำนวนลูกอม A[i] เราสามารถดำเนินการกับสองดัชนี iand j (i !=j) จากนั้นเพิ่มจำนวนลูกอม A[i] อีกจำนวนหนึ่งให้กับ A[i] (A[i] จะไม่ลดลง) เราสามารถดำเนินการนี้ได้หลายครั้ง แต่น่าเสียดายที่บางกองมีมากกว่า k แคนดี้ เราไม่สามารถดำเนินการได้อีกต่อไป เราต้องหาจำนวนครั้งสูงสุดที่จะดำเนินการนี้ได้
ดังนั้น ถ้าอินพุตเป็น A =[1, 2, 3]; k =5 แล้วผลลัพธ์จะเป็น 5 เพราะเราสามารถหา i =0 และสำหรับ j =1 เราสามารถทำได้สามครั้ง และสำหรับ j =2 เราสามารถทำได้สองครั้ง รวมแล้ว 5 ครั้ง
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
ans := 0 n := size of A sort the array A for initialize i := 1, when i < n, update (increase i by 1), do: ans := ans + (k - A[i]) return ans
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int k){
int ans = 0;
int n = A.size();
sort(A.begin(), A.end());
for (int i = 1; i < n; i++){
ans += (k - A[i]) / A[0];
}
return ans;
}
int main(){
vector<int> A = { 1, 2, 3 };
int k = 5;
cout << solve(A, k) << endl;
} อินพุต
{ 1, 2, 3 }, 5 ผลลัพธ์
5