Загадочная точка
От: olimp_20  
Дата: 25.07.15 19:33
Оценка:
Условие задачи
На основе способа
  решение:
#include <fstream>
using namespace std;

//-------------------------------------------
int main()
{
    ifstream fileIn;
    fileIn.open("input.txt");
    ofstream fileOut;
    fileOut.open("output.txt");

    int ax, ay, bx, by;
    fileIn >> ax >> ay >> bx >> by;

    int A1 = by-ay;
    int B1 = ax-bx;
    int C1 = bx*ay-ax*by;

    fileIn >> ax >> ay >> bx >> by;

    int A2 = by-ay;
    int B2 = ax-bx;
    int C2 = bx*ay-ax*by;

    int det = A1*B2-A2*B1;
    if(det!=0){
        double x = -1.0*(C1*B2-C2*B1)/det;
        double y = -1.0*(A1*C2-A2*C1)/det;
        fileOut.setf(ios::scientific);
        fileOut << "1 " << x << " " << y << endl;
    }else{
        if(A1*C2-A2*C1==0 && C1*B2-C2*B1==0) fileOut << "2" << endl;
        else fileOut << "0" << endl;
    }

    fileIn.close();
    fileOut.close();

    return 0;
}

И указанное выше решение, и решение на основе разбора к задаче приводит к выполнению всех тестов, кроме №14 — "Неправильный ответ".
Используя assert , выяснил, что ошибка возникает в блоке:
if(det!=0){
        double x = -1.0*(C1*B2-C2*B1)/det;
        double y = -1.0*(A1*C2-A2*C1)/det;
        fileOut.setf(ios::scientific);
        fileOut << "1 " << x << " " << y << endl;
    }

При этом вычисляются такие x и y, которые не удовлетворяют уравнениям прямых, например, |A1*x+B1*y+C1|>1e-9.
Подскажите пожалуйста, в чем проблема? Неужели есть прямые, для которых детерминант det = A1*B2-A2*B1 отличный от нуля, а точки пересечения не существует?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.