fork(11) download
  1. #include <stdio.h>
  2.  
  3. // Вычисляет положение точки D(xd,yd) относительно прямой AB
  4. double g(double xa, double ya, double xb, double yb, double xd, double yd)
  5. {
  6. return (xd - xa) * (yb - ya) - (yd - ya) * (xb - xa);
  7. }
  8.  
  9. // Лежат ли точки C и D с одной строны прямой (AB)?
  10. bool f(double xa, double ya, double xb, double yb, double xc, double yc, double xd, double yd)
  11. {
  12. return g(xa, ya, xb, yb, xc, yc) * g(xa, ya, xb, yb, xd, yd) >= 0;
  13. }
  14.  
  15. int main() {
  16. double xa, ya, xb, yb, xc, yc, xd, yd;
  17. scanf("%lf%lf", &xa, &ya); // читаем координаты точки A
  18. scanf("%lf%lf", &xb, &yb); // читаем координаты точки D
  19. scanf("%lf%lf", &xc, &yc); // читаем координаты точки C
  20. scanf("%lf%lf", &xd, &yd); // читаем координаты точки D
  21. printf( f(xa,ya,xb,yb,xc,yc,xd,yd) && f(xb,yb,xc,yc,xa,ya,xd,yd) &&
  22. f(xc,yc,xa,ya,xb,yb,xd,yd) ? "yes" : "no");
  23. return 0;
  24. }
Success #stdin #stdout 0s 3300KB
stdin
0	0	2	0	0	2	5	5
0	0	2	0	0	2	1	1
-1	-1	1	-1	0	1	0	0
-1	-1	1	-1	0	1	1	3
-1	-1	1	-1	0	1	0.5	0
-1	-1	1	-1	0	1	0	1
-2	-2	1	-1	0	1	0	0
-1	-1	1	-1	0	1	2	2
stdout
no