Во-первых, для таких больших коэффициентов вы в long long не влезаете, если в лоб считать.
Можно проверить в 2 этапа. Подсчитать A=a*x+b, B=c*x+d. Потом проверить что A*x*x = -B. Но тут нужно заранее отсечь случаи, когда abs(A) > abs(B)/(x*x). Тогда переполнений не будет.
Во-вторых, как же сложно у вас разбор случаев идет. Я не могу разобраться, что там происходит. Там наверняка опечатка, но я даже читать не хочу. Перепишите, пожалуйста. Вам надо найти самый старший ненулевой коэффициент и перебирать его делители. Плюс добавить корень 0, если этот коэффициент не d. Это делается сильно проще так:
if (d != 0) {
n = d;
} else {
s.push_back(0);
if (c != 0) {
n = c;
} else if (b != 0) {
n = b;
} else {
n = a;
}
}
if (n == 0) {cout << "-1"; return}