白準2467号です.
6586 ワード
白準2467号(溶液)
正の酸性溶液と負のアルカリ性溶液がある場合、問題は、リストされた溶液から2つを選択してゼロに近づけることである.
この問題はダブルポインタで解決できます.リストされた列に一番左と右を指定します.また、2つと0未満の場合は0でなければなりません.そのため、左に1つ押して、0より大きくて、右に1つ引いてください.0の場合は、右から左への値を順番に出力し、プログラムを終了します.
ただし、問題は0の最近値を探すことです.つまり、0は出ないかもしれません.したがって,前に2つの値を加えて終端値を求めた後,既存の和よりも終端値が小さい場合は,結果のresultL,resultRを最新にする論理を追加する必要がある.
正の酸性溶液と負のアルカリ性溶液がある場合、問題は、リストされた溶液から2つを選択してゼロに近づけることである.
この問題はダブルポインタで解決できます.リストされた列に一番左と右を指定します.また、2つと0未満の場合は0でなければなりません.そのため、左に1つ押して、0より大きくて、右に1つ引いてください.0の場合は、右から左への値を順番に出力し、プログラムを終了します.
ただし、問題は0の最近値を探すことです.つまり、0は出ないかもしれません.したがって,前に2つの値を加えて終端値を求めた後,既存の和よりも終端値が小さい場合は,結果のresultL,resultRを最新にする論理を追加する必要がある.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
scanf_s("%d", &n);
vector<int> v(n + 1);
int l = 0;
int r = n - 1;
for (int i = 0; i < n; i++)
scanf_s("%d", &v[i]);
int sum = abs(v[0] + v[n - 1]);
int resultL = l;
int resultR = r;
while (l < r) {
int tmp = v[l] + v[r];
if (sum > abs(tmp)) {
sum = abs(tmp);
resultL = l;
resultR = r;
}
if (tmp < 0) {
l++;
}
else if (tmp == 0) { // 어차피 0일 경우 위에서 resultL과 resultR이 변경되었을 것이므로 또 처리해줄 필요 없다.
break;
}
else {
r--;
}
}
printf("%d %d", v[resultL], v[resultR]);
return 0;
}
Reference
この問題について(白準2467号です.), 我々は、より多くの情報をここで見つけました https://velog.io/@l0_0l/백준-2467번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol