Masz bardzo skomplikowaną procedurę pobierania danych. W 3 miejscach masz kod wczytujący dane. Spróbuj uprościć kod. Nie próbuj pisać kodu pod specjalne przypadki. Wg mnie właśnie na tym się wysypuje twój program.
for(int i = 3; i <= n; ++i)
{
cin >> x >> y;
if(x != x1)
{
check = false;
break;
}
}
Tutaj wczytujesz dane i przy określonych warunkach przerywasz wczytywanie(!) co rozwala cały dalszy przepływ danych.