n개의 요소로 구성된 배열이 있다고 가정합니다. arr[i] =x가 되도록 주어진 배열의 모든 요소를 최소값 x로 업데이트합니다. 새 배열의 모든 요소의 곱은 초기 배열의 모든 요소의 곱보다 엄격하게 큽니다. 여기서 i <=arr[i] <=10^10 및 1 <=n <=10^5입니다. 따라서 배열이 [4, 2, 1, 10, 6]과 같은 경우. 따라서 4는 가장 작은 요소입니다. 4 * 4 * 4 * 4 * 4> 4 * 2 * 1 * 10 * 6
n개 요소의 곱이 P라는 것을 알고 있기 때문에 P의 n번째 루트를 찾아야 하고 곱의 n번째 루트를 찾으려면 배열의 n개 요소의 로그의 합에서 n을 나눈 다음 안티로그의 상한선 결과가 될 것입니다.
res =ceil(안티로그(log(x) / 10))
또는 res =ceil(10 ^ (log(x) / 10))
예시
#include <iostream> #include <cmath> #define EPS 1e-15 using namespace std; long long findMinValue(long long arr[], long long n) { long double sum = 0; for (int i=0; i<n; i++) sum += (long double)log10(arr[i])+EPS; long double xl = (long double)(sum/n+EPS); long double res = pow((long double)10.0, (long double)xl) + EPS; return (long long)ceil(res+EPS); } int main() { long long arr[] = {4, 2, 1, 10, 6}; long long n = sizeof(arr)/sizeof(arr[0]); cout << "Min value is: "<< findMinValue(arr, n); }
출력
Min value is: 4