สมมติว่าเรามีตัวเลขสองจำนวน a และ b สองเพื่อนอยู่ที่ตำแหน่ง x = a และ x = b บนแกน OX แต่ละคนสามารถเคลื่อนที่ได้ทีละหน่วยในทิศทางใดก็ได้ไม่จำกัดจำนวนครั้ง การเคลื่อนที่ทำให้ความเหนื่อยล้าตามกฎ: ครั้งแรกเพิ่ม 1 ครั้งที่สองเพิ่ม 2 ต่อไป พวกเขาต้องการพบกันที่จุดจำนวนเต็มบนแกน OX เราต้องหาความเหนื่อยล้ารวมต่ำสุด
เช่น ถ้าอินพุตคือ a = 5; b = 10 เอาต์พุตจะเป็น 9 เพราะวิธีที่ดีที่สุดคือ เพื่อนคนแรกเดิน 3 ก้าวไปขวา เพื่อนคนที่สองเดิน 2 ก้าวไปซ้าย ความเหนื่อยล้ารวม = 1+2+3+1+2 = 9
ขั้นตอนการแก้ปัญหา
ans := |a - b| sum := ans / 2 return (sum + (ans mod 2)) * (sum + 1)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b) {
int ans = abs(a - b);
int sum = ans / 2;
return (sum + (ans % 2)) * (sum + 1);
}
int main() {
int a = 5;
int b = 10;
cout << solve(a, b) << endl;
}
อินพุต
5, 10
เอาต์พุต
9