#include
<
iostream
>
using namespace std;
template < class T >
T Direction (T x1, T y1, T x2, T y2, T x3, T y3)
{
// P1 -> P2 -> P3, 如果方向不变,返回 0。如果顺时针旋转,返回正数。如果逆时针旋转,返回负数。
return (x3 - x1) * (y2 - y1) - (x2 - x1) * (y3 - y1);
}
template < class T >
bool OnSegment (T x1, T y1, T x2, T y2, T x3, T y3)
{
// 已知 P3 在直线 P1_P2 上,判断 P3 是否在线段 P1_P2 上
return min (x1, x2) <= x3 && x3 <= max (x1, x2) && min (y1, y2) <= y3 && y3 <= max (y1, y2);
}
template < class T >
bool Intersect (T x1, T y1, T x2, T y2, T x3, T y3, T x4, T y4)
{
// 判断线段 P1_P2 与 线段 P3_P4 是否相交
T d1 = Direction (x3, y3, x4, y4, x1, y1);
T d2 = Direction (x3, y3, x4, y4, x2, y2);
T d3 = Direction (x1, y1, x2, y2, x3, y3);
T d4 = Direction (x1, y1, x2, y2, x4, y4);
if (((d1 > 0 && d2 < 0 ) || (d1 < 0 && d2 > 0 )) && ((d3 > 0 && d4 < 0 ) || (d3 < 0 && d4 > 0 )))
return true ;
if (d1 == 0 && OnSegment (x3, y3, x4, y4, x1, y1))
return true ;
if (d2 == 0 && OnSegment (x3, y3, x4, y4, x2, y2))
return true ;
if (d3 == 0 && OnSegment (x1, y1, x2, y2, x3, y3))
return true ;
if (d4 == 0 && OnSegment (x1, y1, x2, y2, x4, y4))
return true ;
return false ;
}
void main ()
{
int x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
cout << Intersect (x1, y1, x2, y2, x3, y3, x4, y4);
}
using namespace std;
template < class T >
T Direction (T x1, T y1, T x2, T y2, T x3, T y3)
{
// P1 -> P2 -> P3, 如果方向不变,返回 0。如果顺时针旋转,返回正数。如果逆时针旋转,返回负数。
return (x3 - x1) * (y2 - y1) - (x2 - x1) * (y3 - y1);
}
template < class T >
bool OnSegment (T x1, T y1, T x2, T y2, T x3, T y3)
{
// 已知 P3 在直线 P1_P2 上,判断 P3 是否在线段 P1_P2 上
return min (x1, x2) <= x3 && x3 <= max (x1, x2) && min (y1, y2) <= y3 && y3 <= max (y1, y2);
}
template < class T >
bool Intersect (T x1, T y1, T x2, T y2, T x3, T y3, T x4, T y4)
{
// 判断线段 P1_P2 与 线段 P3_P4 是否相交
T d1 = Direction (x3, y3, x4, y4, x1, y1);
T d2 = Direction (x3, y3, x4, y4, x2, y2);
T d3 = Direction (x1, y1, x2, y2, x3, y3);
T d4 = Direction (x1, y1, x2, y2, x4, y4);
if (((d1 > 0 && d2 < 0 ) || (d1 < 0 && d2 > 0 )) && ((d3 > 0 && d4 < 0 ) || (d3 < 0 && d4 > 0 )))
return true ;
if (d1 == 0 && OnSegment (x3, y3, x4, y4, x1, y1))
return true ;
if (d2 == 0 && OnSegment (x3, y3, x4, y4, x2, y2))
return true ;
if (d3 == 0 && OnSegment (x1, y1, x2, y2, x3, y3))
return true ;
if (d4 == 0 && OnSegment (x1, y1, x2, y2, x4, y4))
return true ;
return false ;
}
void main ()
{
int x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
cout << Intersect (x1, y1, x2, y2, x3, y3, x4, y4);
}