Условие задачи таково, что сумма двух первых чисел может быть равна чуть меньше 2*(10^9), т.е. потребуется около 2 ГБ, а это больше ограничения в 16 МБ!!! Как обойти? Помогите решить.
Имя входного файла in.txt
Имя выходного файла стандартный вывод
Ограничение по памяти 16 мегабайт
В начале файла in.txt содержатся два целых числа. Если сложить их, то вы получите, позицию в файле,
начиная с которой находится третье число, которое вам нужно вывести.
Формат входных данных
Файл in.txt, сформированный по принципу, который описан выше. Гарантируется, что каждое из чисел целое и не превышает 10^9. Также гарантируется, что сумма первых двух чисел не будет отрицательным числом.
Входные данные:
6 5 blah 25491
Выходные данные:
491
Задача решена, спасибо Harry, вот правильный код:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream infile;
infile.open("in.txt", ios::in);
int a, b, j = 0, pos1;
//вывел два первых числа и сложил их
infile >> a >> b;
j = a+b;
// потом, как Вы и сказали сдвинул
infile.seekg(j, ios:: beg);
infile >> pos1;
cout << pos1;
infile.close();
return 0;
}
Да в чем проблема? Считываете первое число, для совсем уж гарантии отсутствия переполнений - в long long int, второе, находите смещение, пользуетесь seekg, чтобы стать на нужное место в файле, читаете и выводите третье число...
Никаких проблем.
ifstream in("input.txt",ios::binary);
int pos1, pos2, num;
in >> pos1 >> pos2;
in.seekg(pos1+pos2);
in >> num;
cout << num;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости