Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- struct point
- {
- long long x,y;
- };
- struct vect
- {
- long long x,y;
- };
- vect v(const point &a,const point &b)
- {
- vect ans;
- ans.x=b.x-a.x;
- ans.y=b.y-a.y;
- return ans;
- }
- long long vector_proizv(vect &a,vect &b)
- {
- return a.x*b.y-a.y*b.x;
- }
- bool cmp(const point &a,const point &b)
- {
- return ((a.x==b.x)&&(a.y==b.y));
- }
- long long skalar_proizv(vect &a,vect &b)
- {
- return a.x*b.x+a.y*b.y;
- }
- int sign(const long long &a)
- {
- if(a>=0)
- {
- return 1;
- }
- if(a==0)
- {
- return 0;
- }
- if(a<=0)
- {
- return -1;
- }
- }
- bool check_otr(const point &b1,const point &b2,const point &e1,const point &e2)
- {
- vect l2,r2,c2,l,r,c;
- l=v(b1,b2);
- r=v(b1,e2);
- c=v(b1,e1);
- l2=v(b2,e1);
- r2=v(b2,b1);
- c2=v(b2,e2);
- if((sign(vector_proizv(c,l))*sign(vector_proizv(c,r))<=0)&&(sign(vector_proizv(c2,l2))*sign(vector_proizv(c2,r2))<=0))
- {
- return true;
- }
- return false;
- }
- long long cross(const point &b1,const point &b2,const point &e1,const point &e2)
- {
- vect l2,r2,c2,l,r,c;
- l=v(b1,b2);
- r=v(b1,e2);
- c=v(b1,e1);
- l2=v(b2,e1);
- r2=v(b2,b1);
- c2=v(b2,e2);
- return vector_proizv(c,c2);
- }
- long long a,b;
- int otr,as,f,cur,cur2,cur3,cur4,flag;
- vect p,q;
- point ta[3],tb[3],w;
- int main()
- {
- //cin>>ta[1].x>>ta[1].y>>ta[2].x>>ta[2].y>>tb[1].x>>tb[1].y>>tb[2].x>>tb[2].y;
- //cout<<check_otr(ta[1],tb[1],ta[2],tb[2]);
- //return 0;
- cin>>ta[1].x>>ta[1].y;
- cin>>a>>b;
- if((a==0)&&(b==0))
- {
- f=1;
- as=1;
- }
- if((a==0)||(b==0)&&(!((a==0)&&(b==0))))
- {
- otr=1;
- }
- ta[2].x=ta[1].x+a;
- ta[2].y=ta[1].y;
- ta[3].x=ta[1].x;
- ta[3].y=ta[1].y+b;
- cin>>tb[1].x>>tb[1].y;
- cin>>a>>b;
- if((a==0)&&(b==0)&&(f==1))
- {
- f=1;
- }
- else
- {
- f=0;
- }
- if((a==0)&&(b==0))
- {
- as=1;
- }
- if((a==0)||(b==0)&&(!((a==0)&&(b==0))))
- {
- otr=1;
- }
- tb[2].x=tb[1].x+a;
- tb[2].y=tb[1].y;
- tb[3].x=tb[1].x;
- tb[3].y=tb[1].y+b;
- for(cur=1;cur<=3;cur++)
- {
- for(cur2=1;cur2<=3;cur2++)
- {
- if(cmp(ta[cur],tb[cur2]))
- {
- cout<<"YES"<<endl;
- return 0;
- }
- }
- }
- for(cur=1;cur<=3;cur++)
- {
- for(cur2=1;cur2<=3;cur2++)
- {
- for(cur3=1;cur3<=3;cur3++)
- {
- for(cur4=1;cur4<=3;cur4++)
- {
- if((cur!=cur3)&&(cur2!=cur4)&&(check_otr(ta[cur],tb[cur2],ta[cur3],tb[cur4])))
- {
- cout<<"YES"<<endl;
- return 0;
- }
- }
- }
- }
- }
- ta[4]=ta[1];
- tb[4]=tb[1];
- for(cur=1;cur<=3;cur++)
- {
- if((f==0)&&(sign(cross(ta[1],ta[1],tb[cur],ta[2]))==sign(cross(ta[2],ta[2],tb[cur],ta[3])))&&(sign(cross(ta[1],ta[1],tb[cur],ta[2]))==sign(cross(ta[3],ta[3],tb[cur],ta[1]))))
- {
- cout<<"YES"<<endl;
- return 0;
- }
- }
- for(cur=1;cur<=3;cur++)
- {
- if((!((otr==1)||(f==1)))&&(f==0)&&
- (sign(cross(tb[1],tb[1],ta[cur],tb[2]))==sign(cross(tb[2],tb[2],ta[cur],tb[3])))&&(sign(cross(tb[1],tb[1],ta[cur],tb[2]))==sign(cross(tb[3],tb[3],ta[cur],tb[1]))))
- {
- cout<<"YES"<<endl;
- return 0;
- }
- }
- cout<<"NO"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement