두 개의 숫자와 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