Cod sursă (job #438602)

Utilizator avatar IoanStoica Stoica Ioan IoanStoica IP ascuns
Problemă Romb2 (clasele 9-10) Compilator cpp | 1,44 kb
Rundă Arhiva de probleme Status evaluat
Dată 23 feb. 2019 19:22:28 Scor 0
#include <bits/stdc++.h>
#define INF 2e+011

using namespace std;

ifstream f("romb.in");
ofstream g("romb.out");

double rap(double a,double b)
{
    if(b==0)return INF;

    return abs(a/b);
}

long long romb(double dx,double dy,int k,double Cx,double Cy,long long val )
{
    if(k==0)  return val;
    if( Cx>=0 && Cy>=0 )///cadranul I
    {
        if(rap(dy,dx) < rap(Cy,Cx ))
            return romb(dx/2,dy/2,k-1,Cx,Cy-dy/2,val*4-3); ///rombul I
        else return romb(dx/2,dy/2,k-1,Cx-dx/2,Cy,val*4);///rombul IV
    }
    else if(Cx<=0 && Cy>=0)///cadranul II
    {
        if(rap(dy,dx) < rap(Cy,Cx ))
            return romb(dx/2,dy/2,k-1,Cx,Cy-dy/2,val*4-3);  ///rombul I
        else return romb(dx/2,dy/2,k-1,Cx+dx/2,Cy,val*4-2); ///rombul II
    }
    else if(Cx<=0 && Cy<=0)///cadranul III
    {
        if(rap(dy,dx) > rap(Cy,Cx ))
            return romb(dx/2,dy/2,k-1,Cx+dx/2,Cy,val*4-2); ///rombul II
        else return romb(dx/2,dy/2,k-1,Cx,Cy+dy/2,val*4-1);///rombul III
    }
    else
    {
        if(rap(dy,dx) < rap(Cy,Cx ))
            return romb(dx/2,dy/2,k-1,Cx,Cy+dy/2,val*4-1);///rombul III
        else return romb(dx/2,dy/2,k-1,Cx-dx/2,Cy,val*4);///rombul IV
    }

}

int main()
{
    long long  T,k;
    double dx,dy,Cx,Cy;cout<<double(2000)/double(0.00000001)<<endl;
    f>>T;
    while(T--)
    {
        f>>dx>>dy>>k>>Cx>>Cy;
        g<<romb(dx,dy,k,Cx,Cy,1)<<"\n";
    }
}