우리가 물리학 실험을 수행하고 있다고 가정합니다. n 쌍의 값과 임계값 k가 제공됩니다. 쌍의 각 첫 번째 값은 합계 값에 추가되고 쌍의 두 번째 값도 다른 합계 값에 추가됩니다. 이제 total 값이 최소값인지 또는 (k - total) 값이 최소값인지 확인합니다. 두 합계에 대해 이 작업을 수행한 다음 더하고 출력을 인쇄합니다.
따라서 입력이 n =4, k =20, values ={{3, 5}, {4, 3}, {2, 1}, {4, 4}}와 같으면 출력은 14가 됩니다.
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
a := 0, b = 0 for initialize i := 0, when i < n, update (increase i by 1), do: a := a + first value of values[i] b := b + second value of values[i] print(min((a, k - a) + minimum of b and k - b))
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; #define N 100 void solve(int n, int k, vector<pair<int,int>> values) { int a = 0, b = 0; for(int i = 0; i < n; i++){ a += values[i].first; b += values[i].second; } cout<<min(a, k - a) + min(b, k - b); } int main() { int n = 4, k = 20; vector<pair<int,int>> values = {{3, 5}, {4, 3}, {2, 1}, {4, 4}}; solve(n, k, values); return 0; }
입력
4, 20, {{3, 5}, {4, 3}, {2, 1}, {4, 4}}
출력
14