[伯俊/BOJ]20300西江筋肉侠[Silver 4]
1704 ワード
アルゴリズムは比較的簡単ですが、C言語では近損失の範囲が10^18なのでlonlong資料型を調整する必要がありますが、難しいです.Quick Sort関数をlonglongと呼び出しましたが、intを受け取りました.
code
#include <stdio.h>
void QuickSort(long long arr[],int start,int end)
{
if (start >= end)
return;
int piv = start, left = start + 1, right = end;
long long temp;
while (left <= right)
{
while (left <= end && arr[left] <= arr[piv])
left++;
while (right > start && arr[right] >= arr[piv])
right--;
if (left > right)
{
temp = arr[right];
arr[right] = arr[piv];
arr[piv] = temp;
}
else
{
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
QuickSort(arr, start, right - 1);
QuickSort(arr, right + 1, end);
}
long long t[10000] = { 0 };
long long min = 0, M = 0;
int main()
{
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%lld", &t[i]);
QuickSort(t, 0, N-1);
if (N % 2 == 1)
{
for (int i = 0; i < N / 2; i++)
{
M = t[i] + t[(N - 2) - i];
if (M > min)
min = M;
}
}
else
{
for (int i = 0; i < N / 2; i++)
{
M = t[i] + t[(N - 1) - i];
if (M > min)
min = M;
}
}
printf("%lld", min);
return 0;
}
運動機材が単数の場合と偶数の場合を分けて考えましたが、昇順に並べ替えて、与えられた値に最値+最小値を加えて比較すると、近損失度の最大値を求めることができます.
奇数の場合は、最小値を最後の値とし、両辺の値を加算して最小値を求めます.
偶数なら両辺の値を加算して、一番値を求めればいいです.
Reference
この問題について([伯俊/BOJ]20300西江筋肉侠[Silver 4]), 我々は、より多くの情報をここで見つけました https://velog.io/@jychan99/백준BOJ-20300.-서강근육맨-Silver-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol