두 개의 숫자와 b가 있다고 가정합니다. 두 친구가 OX 축에서 x =a 및 x =b 위치에 있습니다. 각 친구는 라인을 따라 원하는 방향으로 무제한으로 이동할 수 있습니다. 이동하면 친구의 피로가 다음 규칙에 따라 변경됩니다. 첫 번째 이동은 피로도가 1 증가하고 두 번째 이동은 피로도가 2 증가하는 식입니다. 그들 중 두 명은 OX 축에서 하나의 정수 점을 만나고 싶어합니다. 우리는 그들이 얻을 수 있는 최소한의 총 피로도를 찾아야 합니다.
따라서 입력이 =5와 같으면; b =10이면 최적의 방법 중 하나가 다음과 같기 때문에 출력은 9가 됩니다. 첫 번째 친구는 오른쪽으로 세 걸음, 두 번째 친구는 왼쪽으로 두 걸음 이동해야 합니다. 따라서 총 피로도는 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