Maggu and Vectors
below given code is for iitwpc4c spoj or maggu and vectors spoj.
for first time i get approximately 20 WA in this problem . here in this problem we have to check only that vector can form triangle or not.
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstdlib>
using namespace std;
class vect
{
public:
int x,y;
vect operator +(vect v)
{
vect temp;
temp.x=v.x + x;
temp.y=v.y + y;
return temp;
}
vect operator -()
{
vect temp;
temp.x = -1*x;
temp.y = -1*y;
return temp;
}
bool operator ==(vect v)
{
if(v.x==x && v.y == y)
return true;
else
return false;
}
bool operator !=(vect v)
{
if(v.x != x || v.y != y)
return true;
else
return false;
}
bool is_colinear(vect v)
{
if(x==v.x||y==v.y)
return 1;
else if(x==0&&y==0)
return 1;
else if(v.x==0&&v.y==0)
return 1;
else if(y==0)
return 0;
else if(v.y==0)
return 0;
else if(x/(double)v.x==y/(double)v.y)
return 1;
else
return 0;
}
vect make_pair()
{
vect temp;
if(x<0)
temp.x=1001 + (-1*x);
else
temp.x=x;
if(y<0)
temp.y=1001 + (-1 * y);
else
temp.y=y;
return temp;
}
};
int check[2009][2009]={0};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,i,j,k,flag=0,pos_y,pos_x,x2,y2;
vect v[1009],temp;
for(i=0;i<2003;i++)
for(j=0;j<=2003;j++)
check[i][j]=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%d",&v[i].x,&v[i].y);
if(v[i].x<0){
pos_x=1001 + (-1*v[i].x);
}
else {
pos_x=v[i].x;}
if(v[i].y<0){
pos_y=1001 + (-1 * v[i].y);}
else{
pos_y=v[i].y; }
check[pos_y][pos_x]=1;
}
vect zero,pos;
zero.x=0;
zero.y=0;
if(n<3)
{
printf("NO\n");
continue;
}
flag=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(v[i].is_colinear(v[j]))
continue;
temp= v[i] + v[j];
if(temp.x<=1000 && temp.x>=-1000 && temp.y<=1000 && temp.y>=-1000)
{
pos=temp.make_pair();
if(check[pos.y][pos.x])
{
flag=1;
break;
}
}
temp= v[i] + (-v[j]);
if(temp.x<=1000 && temp.x>=-1000 && temp.y<=1000 && temp.y>=-1000)
{
pos=temp.make_pair();
if(check[pos.y][pos.x])
{
flag=1;
break;
}
}
temp= (-v[i]) + (-v[j]);
if(temp.x<=1000 && temp.x>=-1000 && temp.y<=1000 && temp.y>=-1000)
{
pos=temp.make_pair();
if(check[pos.y][pos.x])
{
flag=1;
break;
}
}
temp= (-v[i]) + v[j];
if(temp.x<=1000 && temp.x>=-1000 && temp.y<=1000 && temp.y>=-1000)
{
pos=temp.make_pair();
if(check[pos.y][pos.x])
{
flag=1;
break;
}
}
}
if(flag)
break;
}
if(!flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
No comments:
Post a Comment
Your comment is valuable to us