Имеется задача: на вход подаётся файл "input.txt". На первой строке этого файла находится число k, на второй строке дана последовательность чисел, записанных через пробел, числа в дипазоне 0 < n < 99999999. Если в последовательности есть два числа, сумма которых равна k, то в файл "output.txt" записать 1, иначе - 0.
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
unsigned int k, num, ind=0, mxN=2e6;
unsigned int arr[mxN];
ifstream in("input.txt");
ofstream out("output.txt");
in >> k;
while (in >> num)
{
arr[ind] = num;
++ind;
}
if (!k || !ind) return 0;
// 2 pointers
sort(arr, arr+ind);
int l = 0;
int r = ind - 1;
while (l != r)
{
if (arr[l] + arr[r] < k)
{
++l;
}
else if (arr[l] + arr[r] > k)
{
--r;
}
else {
out << "1";
out.close();
return 0;
}
}
out << "0";
out.close();
return 0;
}
Написал такое решение. Оно рабочее, но на одном из тестов падает с флагом - RE. С чем это может быть связано?