Сначала я хотел бы сказать, что C++ не является моим основным языком, и я прошу прощения, если это базовые знания.
Моя проблема в том, что я должен преодолеть временной интервал с помощью моего алгоритма. Я уверен, что сам алгоритм хорош (и мне не нужна помощь;)), но данные, переданные ему, даются с консоли.
Мне нужно прочитать случайное число целых чисел (предел 10^7) в одной строке, завершенной символом EOF. До сих пор я получил что-то вроде этого:
Ускоренный способ чтения случайного числа целых чисел из консоли C++
cin.tie(NULL);
std::ios::sync_with_stdio(false);
vector <unsigned int > vector_of_int;
...
std::string str;
std::getline(std::cin, str);
std::istringstream sstr(str);
unsigned int n;
while(sstr >> n){
vector_of_int.push_back(n);
}
Однако - это не достаточно быстро, чтобы вписаться в лимит времени для выполнения этой задачи. Итак, вопрос в том, есть ли более быстрый способ (spoj-friendly) для чтения таких данных?
Мои результаты
number status signal time memory
test 0 passed OK 0.0s 2828KB
test 1 passed OK 0.0s 2828KB
test 2 passed OK 0.01s 2828KB
test 3 passed OK 0.0s 2828KB
test 4 passed OK 0.01s 2828KB
test 5 passed OK 0.0s 2828KB
test 6 passed OK 0.0s 2940KB
test 7 passed OK 0.04s 3060KB
test 8 passed OK 0.24s 3452KB
test 9 passed OK 0.44s 3452KB
test 10 passed OK 0.84s 3452KB
test 11 TLE OK 1.01s 27784KB
test 12 TLE OK 1.01s 28056KB
EDIT:
Результаты после комментируя vector_of_int.push_back(n);
линии
number status signal time memory
test 0 passed OK 0.0s 2828KB
test 1 wrong answer OK 0.0s 2828KB
test 2 wrong answer OK 0.0s 2828KB
test 3 wrong answer OK 0.0s 2828KB
test 4 wrong answer OK 0.0s 2828KB
test 5 wrong answer OK 0.0s 2828KB
test 6 wrong answer OK 0.01s 2964KB
test 7 runtime error SIGSEGV 0.02s 3128KB
test 8 runtime error SIGSEGV 0.06s 5504KB
test 9 runtime error SIGSEGV 0.09s 8032KB
test 10 runtime error SIGSEGV 0.16s 13224KB
test 11 runtime error SIGSEGV 0.21s 14976KB
test 12 runtime error SIGSEGV 0.28s 23440KB
EDIT 2:
Я заметил, что вход лин e прерывается EOF вместо новой строки.
Как близко вы к делу? т. е. нужно ли нам использовать весь подход или мы можем его настроить? – Bathsheba
Нужно ли приходить с консоли? Файл будет лучше. Можете ли вы дождаться начала теста до тех пор, пока не загрузите свои входы? Кроме того, вы должны определенно по крайней мере добавить код таймера внутри этой программы (или запустить профайлер), чтобы диагностировать, является ли это даже вашим узким местом. – VoidStar
@ Батшеба: Я отредактировал свой ответ. –