WA#13
Послано
B&B 9 май 2013 18:26
Show me test 13 please.
#include <cstdio>
#include <cmath>
#include <algorithm>
struct point
{
int x, y;
};
double distance(const point P1, const point P2)
{
return sqrt((double)(P1.x - P2.x)*(P1.x - P2.x) + (double)(P1.y - P2.y)*(P1.y - P2.y));
}
bool operator ==(const point P1, const point P2)
{
if (P1.x == P2.x && P1.y == P2.y) return 1;
return 0;
}
int main()
{
point A, B, C;
unsigned int L;
scanf("%d%d%d%d%d%d%d", &A.x, &A.y, &B.x, &B.y, &C.x, &C.y, &L);
const double pi = 3.14159265;
const double epsilon = 0.00000001;
double alpha, beta, gamma;
double a, b, c;
a = distance(B, C);
b = distance(A, C);
c = distance(A, B);
alpha = acos((b*b + c*c - a*a)/(2*b*c));
beta = acos((a*a + c*c - b*b)/(2*a*c));
gamma = acos((a*a + b*b - c*c)/(2*a*b));
if (A == B)
{
printf("1 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
if (L >= a) printf("0.00\n0.00\n");
else printf("%.2lf\n%.2lf\n", a - L, b - L);
return 0;
}
if(abs(alpha + beta - pi) < epsilon)
{
printf("2 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = std::min(a, b);
double nl2 = std::max(a, b);
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}
if (abs(alpha - pi/2) < epsilon)
{
printf("3 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = b;
double nl2 = std::max(a, b);
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}
if (abs(beta - pi/2) < epsilon)
{
printf("4 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = a;
double nl2 = std::max(a, b);
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}
if(alpha > pi/2)
{
printf("5 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = b;
double nl2 = a;
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}
if(beta > pi/2)
{
printf("6 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = a;
double nl2 = b;
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}
printf("7 is working\n");
printf("a is %.2lf\nb is %.2lf\nc is %.2lf\n", a , b , c);
printf("alpha is %.2lf\nbeta is %.2lf\ngamma is %.2lf\n", alpha, beta, gamma);
double nl1 = b * sin(alpha);
double nl2 = std::max(a, b);
if (L >= nl1) printf("0.00\n");
else printf("%.2lf\n", nl1 - L);
if (L >= nl2) printf("0.00\n");
else printf("%.2lf\n", nl2 - L);
return 0;
}