调的憨憨题解(上一个那个我发错了地方了)

发布时间:2019-11-01 23:18:40
贴主:关注鲤鱼Liyuu喵
热度:1
正在讨论:P2588 - 几何题10-交点数量 题目传送门

关注鲤鱼Liyuu喵 2019-11-01






#include <iostream>

#include<cmath>

using namespace std;




int main()

{

int n;

cin >> n;

for (int i = 1; i <= n; i++)

{

long double a, b, c, px, py, qx, qy;

cin >> a >> b >> c >> px >> py >> qx >> qy;

long double f = 0, x = 0, y = 0;

f = (qy - py) / (qx - px);//两点行成的直线斜率

x = (f - b) / (2 * a);//求导完是f=2*a*x+b,这时候只有x是未知量,也就是在曲线上斜率与直线斜率相同时的点的坐标。

y = a * pow(x, 2) + b * x + c;//求出改点纵坐标

if (qx == px)//竖着为1

{

cout << 1;

}

else if (qy == py)//横着根据开口上下,将函数极值与该直线的y坐标比

{

if (a > 0)

{

if ((4 * a * c - b * b) / (4 * a) > qy)

{

cout << 0;

}

else if ((4 * a * c - b * b) / (4 * a) < qy)

{

cout << 2;

}

else

{

cout << 1;

}

}

else

{

if ((4 * a * c - b * b) / (4 * a) > qy)

{

cout << 2;

}

else if ((4 * a * c - b * b) / (4 * a) < qy)

{

cout << 0;

}

else

{

cout << 1;

}

}

}

else if (a > 0)//如果线斜着,找到曲线上斜率等于直线斜率的时候在曲线上的点,带入直线方程,判断y与f(x)关系与开口上下来直线曲线位置

{

if (y > f * x - f * qx + qy)

{

cout << 0;

}

else if (y < f * x - f * qx + qy)

{

cout << 2;

}

else

{

cout << 1;

}

}

else if (a < 0)

{

if (y > f * x - f * qx + qy)

{

cout << 2;

}

else if (y < f * x - f * qx + qy)

{

cout << 0;

}

else

{

cout << 1;

}

}

cout << endl;


}

}





(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1