## 11800 - Determine the Shape

Moderator: Board moderators

xnorax
New poster
Posts: 9
Joined: Thu Jun 26, 2014 9:31 pm

### Re: 11800 - Determine the Shape

I used this algorithm to solve the problem
1- if same x axis for 1st & 3rd sides
Parallelogram
OR
square
OR
rectangular
OR
Trapezium
2- if same y axis
Trapezium
3- test if equal sides and not a square
Rhombus
4- else
Ordinal

Code: Select all

``````#include <iostream>
using namespace std;

int main(){
long long int tc,arr[8];
cin>>tc;
for (int i=1; i<=tc; i++) {
for(int j=0;j<8; j++){
cin>>arr[j];
}
if(arr[1]==arr[3] && arr[5]==arr[7]){//same x axis for 1st & 2nd side

//1******
if((arr[4]>arr[2] && arr[6]>arr[0])||(arr[4]<arr[2] && arr[6]<arr[0]))
printf("Case %i: Parallelogram\n",i);
//2****** equal sides
else if(arr[5]-arr[3] == arr[2]-arr[0])
printf("Case %i: Square\n",i);
//3***** same y
else if(arr[2] == arr[4]&&arr[6]==arr[0])
printf("Case %i: Rectangle\n",i);

else
printf("Case %i: Trapezium\n",i);

}
else if(arr[2] == arr[4]&&arr[6]==arr[0])
printf("Case %i: Trapezium\n",i);
else if((arr[3]==arr[7] && arr[1]==arr[5])&&(arr[2]-arr[6] == arr[4]-arr[0])){
printf("Case %i: Rhombus\n",i);
}
else

}

return 0;
}``````

brianfry713
Guru
Posts: 5947
Joined: Thu Sep 01, 2011 9:09 am
Location: San Jose, CA, USA

### Re: 11800 - Determine the Shape

Try the I/O in this thread.
Check input and AC output for thousands of problems on uDebug!

garbage
New poster
Posts: 19
Joined: Thu Feb 21, 2013 5:46 am

### Re: 11800 - Determine the Shape

Code: Select all

``````#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<string>
using namespace std;

struct Point{
long long x;
long long y;
}pnt;

class Comparator
{
public:
bool operator()(Point& P1, Point& P2)
{
if(P1.x > P2.x)
return true;

return false;
}
};

long long gcd(long long a, long long b)
{
if(a%b == 0)
return b;

else
return gcd(b, a%b);
}

string convertToString(long long n)
{
string S = "";

while(n!=0)
{
long long r = n%10;
n = n/10;
S.push_back(r+'0');
}

return S;
}

string lineSlope(Point P1, Point P2)
{
if(P1.x == P2.x)
return "inf";

else
if(P1.y == P2.y)
return "zero";

else
{
string minus = "";
long long n1 = P2.y - P1.y;
long long n2 = P2.x - P1.x;
long long n = gcd(n1, n2);

n1 = n1 / n;
n2 = n2 / n;

if(n1 < 0 && n2 < 0)
{
n1 = (-1) * n1;
n2 = (-1) * n2;
}

else
if((n1 < 0 && n2 >= 0))
{
n1 = (-1) * n1;
minus = "-";
}

else
if(n1 >= 0 && n2 < 0)
{
n2 = (-1) * n2;
minus = "-";
}

return minus+(convertToString(n1)+convertToString(n2));
}
}

int main()
{
long long test, d1, d2, d3, d4, d5, d6;

cin>>test;

for(long long i=1;i<=test;i++)
{
Point P1, P2, P3, P4;
priority_queue<Point, vector<Point>, Comparator>pq;

for(long long j=1;j<=4;j++)
{
cin>>pnt.x>>pnt.y;
pq.push(pnt);
}

P1 = pq.top();
pq.pop();

P2 = pq.top();
pq.pop();

P3 = pq.top();
pq.pop();

P4 = pq.top();
pq.pop();

//cout<<P3.x<<"  "<<P3.y<<"  "<<P4.x<<"  "<<P4.y<<endl;

if(P1.y > P2.y)
{
Point tmp = P1;
P1 = P2;
P2 = tmp;
}

if(P3.y < P4.y)
{
Point tmp = P3;
P3 = P4;
P4 = tmp;
}

d1 = (P1.x - P2.x)*(P1.x - P2.x) + (P1.y - P2.y)*(P1.y - P2.y);
d2 = (P3.x - P4.x)*(P3.x - P4.x) + (P3.y - P4.y)*(P3.y - P4.y);
d3 = (P1.x - P4.x)*(P1.x - P4.x) + (P1.y - P4.y)*(P1.y - P4.y);
d4 = (P2.x - P3.x)*(P2.x - P3.x) + (P2.y - P3.y)*(P2.y - P3.y);

d5 = (P1.x - P3.x)*(P1.x - P3.x) + (P1.y - P3.y)*(P1.y - P3.y);
d6 = (P2.x - P4.x)*(P2.x - P4.x) + (P2.y - P4.y)*(P2.y - P4.y);

cout<<"Case "<<i<<": ";

if(d1 == d2 && d2 == d3 && d3 == d4 && d5 == d6)
cout<<"Square"<<endl;

else
if(d1 == d2 && d2 == d3 && d3 == d4 && d5 != d6)
cout<<"Rhombus"<<endl;

else
if(d1 == d2 && d3 == d4 && d5 == d6)
cout<<"Rectangle"<<endl;

else
if(d1 == d2 && d3 == d4 && d5 != d6)
cout<<"Parallelogram"<<endl;

else
{
string slp1 = lineSlope(P1, P2);
string slp2 = lineSlope(P3, P4);
string slp3 = lineSlope(P1, P4);
string slp4 = lineSlope(P2, P3);

//cout<<slp1<<"  "<<slp2<<"  "<<slp3<<"   "<<slp4<<endl;

if((slp1 == slp2 && slp3 != slp4) || (slp3 == slp4 && slp1 != slp2))
cout<<"Trapezium"<<endl;

else