Najniższy czas 0.01 uzyskałem dzięki fast i/o + kombinacje alpejskie. Czas 0.7 scanf/printf + kombinacje.
Zastanów się, czy koniecznie trzeba wszystko liczyć na doublach? Czy sprawdzanie i porównywanie nie można zrobić na "zwykłych" liczbach całkowitych i dopiero, gdy wyjdzie taki przypadek, wydrukować tylko końcowe obliczenie w double np printf("%lf\n", sqrt(......));
Dodatkowo, czy int wystarcza? Czy można liczyć na intach i sprawdzać czy nie przekraczamy ich zakresu?
Zamiast porównywać sqrt() z costam, można porównywać sqrt()^2 z costam^2
Zamiast
sqrt(pow(x2-x0,2)+pow(y3-y1,2))
lepiej
sqrt((x2-x0)*(x2-x0).......)
a jeszcze lepiej
hypot(x2-x0,y3-y1) //ładniejszy i krótszy zapis i bezpieczeństwo obliczeń, a szybkość taka sama, lub nie wiele wolniej/szybciej.